{
  "Lucene.Net.Codecs.Appending.AppendingCodec.html": {
    "href": "Lucene.Net.Codecs.Appending.AppendingCodec.html",
    "title": "Class AppendingCodec | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.Codec Lucene.Net.Codecs.FilterCodec AppendingCodec Inherited Members Lucene.Net.Codecs.FilterCodec.m_delegate Lucene.Net.Codecs.FilterCodec.DocValuesFormat Lucene.Net.Codecs.FilterCodec.FieldInfosFormat Lucene.Net.Codecs.FilterCodec.LiveDocsFormat Lucene.Net.Codecs.FilterCodec.NormsFormat Lucene.Net.Codecs.FilterCodec.SegmentInfoFormat Lucene.Net.Codecs.FilterCodec.StoredFieldsFormat Lucene.Net.Codecs.FilterCodec.TermVectorsFormat Lucene.Net.Codecs.Codec.SetCodecFactory(Lucene.Net.Codecs.ICodecFactory) Lucene.Net.Codecs.Codec.GetCodecFactory() Lucene.Net.Codecs.Codec.Name Codec.ForName(String) Lucene.Net.Codecs.Codec.AvailableCodecs Lucene.Net.Codecs.Codec.Default Lucene.Net.Codecs.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 Lucene.Net.Codecs.PostingsFormat Overrides Lucene.Net.Codecs.FilterCodec.PostingsFormat"
  },
  "Lucene.Net.Codecs.Appending.AppendingTermsReader.html": {
    "href": "Lucene.Net.Codecs.Appending.AppendingTermsReader.html",
    "title": "Class AppendingTermsReader | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Index.Fields Lucene.Net.Codecs.FieldsProducer Lucene.Net.Codecs.BlockTreeTermsReader AppendingTermsReader Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable System.IDisposable Inherited Members BlockTreeTermsReader.Dispose(Boolean) Lucene.Net.Codecs.BlockTreeTermsReader.GetEnumerator() BlockTreeTermsReader.GetTerms(String) Lucene.Net.Codecs.BlockTreeTermsReader.Count Lucene.Net.Codecs.BlockTreeTermsReader.RamBytesUsed() Lucene.Net.Codecs.BlockTreeTermsReader.CheckIntegrity() Lucene.Net.Codecs.FieldsProducer.Dispose() Lucene.Net.Index.Fields.System.Collections.IEnumerable.GetEnumerator() Lucene.Net.Index.Fields.UniqueTermCount Lucene.Net.Index.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 Lucene.Net.Store.Directory dir Lucene.Net.Index.FieldInfos fieldInfos Lucene.Net.Index.SegmentInfo info Lucene.Net.Codecs.PostingsReaderBase postingsReader Lucene.Net.Store.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 Lucene.Net.Store.IndexInput input Returns Type Description System.Int32 Overrides Lucene.Net.Codecs.BlockTreeTermsReader.ReadHeader(Lucene.Net.Store.IndexInput) | Improve this Doc View Source ReadIndexHeader(IndexInput) Declaration protected override int ReadIndexHeader(IndexInput input) Parameters Type Name Description Lucene.Net.Store.IndexInput input Returns Type Description System.Int32 Overrides Lucene.Net.Codecs.BlockTreeTermsReader.ReadIndexHeader(Lucene.Net.Store.IndexInput) | Improve this Doc View Source SeekDir(IndexInput, Int64) Declaration protected override void SeekDir(IndexInput input, long dirOffset) Parameters Type Name Description Lucene.Net.Store.IndexInput input System.Int64 dirOffset Overrides BlockTreeTermsReader.SeekDir(IndexInput, Int64) Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IDisposable"
  },
  "Lucene.Net.Codecs.Appending.html": {
    "href": "Lucene.Net.Codecs.Appending.html",
    "title": "Namespace Lucene.Net.Codecs.Appending | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Appending <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Codec for on append-only outputs, such as plain output streams and append-only filesystems. Classes AppendingCodec This codec uses an index format that is very similar to Lucene40Codec but works on append-only outputs, such as plain output streams and append-only filesystems. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AppendingTermsReader Reads append-only terms from AppendingTermsWriter. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "Lucene.Net.Codecs.BlockTerms.BlockTermsReader.html": {
    "href": "Lucene.Net.Codecs.BlockTerms.BlockTermsReader.html",
    "title": "Class BlockTermsReader | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class BlockTermsReader Handles a terms dict, but decouples all details of doc/freqs/positions reading to an instance of Lucene.Net.Codecs.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 Lucene.Net.Index.Fields Lucene.Net.Codecs.FieldsProducer BlockTermsReader Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable System.IDisposable Inherited Members Lucene.Net.Codecs.FieldsProducer.Dispose() Lucene.Net.Index.Fields.System.Collections.IEnumerable.GetEnumerator() Lucene.Net.Index.Fields.UniqueTermCount Lucene.Net.Index.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 Lucene.Net.Store.Directory dir Lucene.Net.Index.FieldInfos fieldInfos Lucene.Net.Index.SegmentInfo info Lucene.Net.Codecs.PostingsReaderBase postingsReader Lucene.Net.Store.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 Lucene.Net.Index.Fields.Count Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides Lucene.Net.Codecs.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 Lucene.Net.Index.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 Lucene.Net.Index.Terms Overrides Fields.GetTerms(String) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides Lucene.Net.Codecs.FieldsProducer.RamBytesUsed() Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IDisposable"
  },
  "Lucene.Net.Codecs.BlockTerms.BlockTermsWriter.html": {
    "href": "Lucene.Net.Codecs.BlockTerms.BlockTermsWriter.html",
    "title": "Class BlockTermsWriter | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.FieldsConsumer BlockTermsWriter Implements System.IDisposable Inherited Members Lucene.Net.Codecs.FieldsConsumer.Dispose() Lucene.Net.Codecs.FieldsConsumer.Merge(Lucene.Net.Index.MergeState, Lucene.Net.Index.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 Lucene.Net.Index.SegmentWriteState state Lucene.Net.Codecs.PostingsWriterBase postingsWriter Fields | Improve this Doc View Source m_output Declaration protected IndexOutput m_output Field Value Type Description Lucene.Net.Store.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 const int VERSION_APPEND_ONLY = 1 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CHECKSUM Declaration public const int VERSION_CHECKSUM = 3 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 const int VERSION_META_ARRAY = 2 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START 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 Lucene.Net.Index.FieldInfo field Returns Type Description Lucene.Net.Codecs.TermsConsumer Overrides Lucene.Net.Codecs.FieldsConsumer.AddField(Lucene.Net.Index.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"
  },
  "Lucene.Net.Codecs.BlockTerms.FixedGapTermsIndexReader.html": {
    "href": "Lucene.Net.Codecs.BlockTerms.FixedGapTermsIndexReader.html",
    "title": "Class FixedGapTermsIndexReader | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Store.Directory dir Lucene.Net.Index.FieldInfos fieldInfos System.String segment System.Int32 indexDivisor System.Collections.Generic.IComparer < Lucene.Net.Util.BytesRef > termComp System.String segmentSuffix Lucene.Net.Store.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 Lucene.Net.Index.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"
  },
  "Lucene.Net.Codecs.BlockTerms.FixedGapTermsIndexWriter.html": {
    "href": "Lucene.Net.Codecs.BlockTerms.FixedGapTermsIndexWriter.html",
    "title": "Class FixedGapTermsIndexWriter | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Index.SegmentWriteState state Fields | Improve this Doc View Source m_output Declaration protected IndexOutput m_output Field Value Type Description Lucene.Net.Store.IndexOutput Methods | Improve this Doc View Source AddField(FieldInfo, Int64) Declaration public override TermsIndexWriterBase.FieldWriter AddField(FieldInfo field, long termsFilePointer) Parameters Type Name Description Lucene.Net.Index.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 Lucene.Net.Util.BytesRef priorTerm Lucene.Net.Util.BytesRef indexedTerm Returns Type Description System.Int32 Implements System.IDisposable"
  },
  "Lucene.Net.Codecs.BlockTerms.html": {
    "href": "Lucene.Net.Codecs.BlockTerms.html",
    "title": "Namespace Lucene.Net.Codecs.BlockTerms | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.BlockTerms <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Pluggable term index / block terms dictionary implementations. Classes BlockTermsReader Handles a terms dict, but decouples all details of doc/freqs/positions reading to an instance of Lucene.Net.Codecs.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 Lucene.Net.Util.BytesRef text + long fileOffset), and then this reader must be able to retrieve the nearest index term to a provided term text. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermsIndexReaderBase.FieldIndexEnum Similar to TermsEnum , except, the only \"metadata\" it reports for a given indexed term is the long fileOffset into the main terms dictionary file. TermsIndexWriterBase Base class for terms index implementations to plug into BlockTermsWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermsIndexWriterBase.FieldWriter Terms index API for a single field. VariableGapTermsIndexReader See VariableGapTermsIndexWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk VariableGapTermsIndexWriter Selects index terms according to provided pluggable VariableGapTermsIndexWriter.IndexTermSelector , and stores them in a prefix trie that's loaded entirely in RAM stored as an FST<T> . This terms index only supports unsigned byte term sort order (unicode codepoint order when the bytes are UTF8). This is a Lucene.NET EXPERIMENTAL API, use at your own risk VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector Sets an index term when docFreq >= docFreqThresh, or every interval terms. This should reduce seek time to high docFreq terms. VariableGapTermsIndexWriter.EveryNTermSelector VariableGapTermsIndexWriter.IndexTermSelector Hook for selecting which terms should be placed in the terms index. NewField(FieldInfo) is called at the start of each new field, and IsIndexTerm(BytesRef, TermStats) for each term in that field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "Lucene.Net.Codecs.BlockTerms.TermsIndexReaderBase.FieldIndexEnum.html": {
    "href": "Lucene.Net.Codecs.BlockTerms.TermsIndexReaderBase.FieldIndexEnum.html",
    "title": "Class TermsIndexReaderBase.FieldIndexEnum | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Util.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 Lucene.Net.Util.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"
  },
  "Lucene.Net.Codecs.BlockTerms.TermsIndexReaderBase.html": {
    "href": "Lucene.Net.Codecs.BlockTerms.TermsIndexReaderBase.html",
    "title": "Class TermsIndexReaderBase | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Util.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 Lucene.Net.Index.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"
  },
  "Lucene.Net.Codecs.BlockTerms.TermsIndexWriterBase.FieldWriter.html": {
    "href": "Lucene.Net.Codecs.BlockTerms.TermsIndexWriterBase.FieldWriter.html",
    "title": "Class TermsIndexWriterBase.FieldWriter | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Util.BytesRef text Lucene.Net.Codecs.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 Lucene.Net.Util.BytesRef text Lucene.Net.Codecs.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"
  },
  "Lucene.Net.Codecs.BlockTerms.TermsIndexWriterBase.html": {
    "href": "Lucene.Net.Codecs.BlockTerms.TermsIndexWriterBase.html",
    "title": "Class TermsIndexWriterBase | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TermsIndexWriterBase Base class for terms index implementations to plug into BlockTermsWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsIndexWriterBase FixedGapTermsIndexWriter VariableGapTermsIndexWriter Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public abstract class TermsIndexWriterBase : IDisposable Methods | Improve this Doc View Source AddField(FieldInfo, Int64) Declaration public abstract TermsIndexWriterBase.FieldWriter AddField(FieldInfo fieldInfo, long termsFilePointer) Parameters Type Name Description Lucene.Net.Index.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"
  },
  "Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexReader.html": {
    "href": "Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexReader.html",
    "title": "Class VariableGapTermsIndexReader | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Store.Directory dir Lucene.Net.Index.FieldInfos fieldInfos System.String segment System.Int32 indexDivisor System.String segmentSuffix Lucene.Net.Store.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 Lucene.Net.Index.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"
  },
  "Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector.html": {
    "href": "Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector.html",
    "title": "Class VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Util.BytesRef term Lucene.Net.Codecs.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 Lucene.Net.Index.FieldInfo fieldInfo Overrides VariableGapTermsIndexWriter.IndexTermSelector.NewField(FieldInfo)"
  },
  "Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.EveryNTermSelector.html": {
    "href": "Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.EveryNTermSelector.html",
    "title": "Class VariableGapTermsIndexWriter.EveryNTermSelector | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Util.BytesRef term Lucene.Net.Codecs.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 Lucene.Net.Index.FieldInfo fieldInfo Overrides VariableGapTermsIndexWriter.IndexTermSelector.NewField(FieldInfo)"
  },
  "Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.html": {
    "href": "Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.html",
    "title": "Class VariableGapTermsIndexWriter | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Index.SegmentWriteState state VariableGapTermsIndexWriter.IndexTermSelector policy Fields | Improve this Doc View Source m_output Declaration protected IndexOutput m_output Field Value Type Description Lucene.Net.Store.IndexOutput Methods | Improve this Doc View Source AddField(FieldInfo, Int64) Declaration public override TermsIndexWriterBase.FieldWriter AddField(FieldInfo field, long termsFilePointer) Parameters Type Name Description Lucene.Net.Index.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 Lucene.Net.Util.BytesRef priorTerm Lucene.Net.Util.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"
  },
  "Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.IndexTermSelector.html": {
    "href": "Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.IndexTermSelector.html",
    "title": "Class VariableGapTermsIndexWriter.IndexTermSelector | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Util.BytesRef term Lucene.Net.Codecs.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 Lucene.Net.Index.FieldInfo fieldInfo"
  },
  "Lucene.Net.Codecs.Bloom.BloomFilterFactory.html": {
    "href": "Lucene.Net.Codecs.Bloom.BloomFilterFactory.html",
    "title": "Class BloomFilterFactory | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Index.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 Lucene.Net.Index.SegmentWriteState state The content to be indexed. Lucene.Net.Index.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. Lucene.Net.Index.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."
  },
  "Lucene.Net.Codecs.Bloom.BloomFilteringPostingsFormat.html": {
    "href": "Lucene.Net.Codecs.Bloom.BloomFilteringPostingsFormat.html",
    "title": "Class BloomFilteringPostingsFormat | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class BloomFilteringPostingsFormat A Lucene.Net.Codecs.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 Lucene.Net.Codecs.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 Lucene.Net.Codecs.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 Lucene.Net.Codecs.PostingsFormat BloomFilteringPostingsFormat Inherited Members Lucene.Net.Codecs.PostingsFormat.EMPTY Lucene.Net.Codecs.PostingsFormat.SetPostingsFormatFactory(Lucene.Net.Codecs.IPostingsFormatFactory) Lucene.Net.Codecs.PostingsFormat.GetPostingsFormatFactory() Lucene.Net.Codecs.PostingsFormat.Name Lucene.Net.Codecs.PostingsFormat.ToString() PostingsFormat.ForName(String) Lucene.Net.Codecs.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 Lucene.Net.Codecs.PostingsFormat delegates to a choice of delegate Lucene.Net.Codecs.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 Lucene.Net.Codecs.PostingsFormat delegatePostingsFormat The Lucene.Net.Codecs.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 Lucene.Net.Codecs.PostingsFormat delegates to a choice of delegate Lucene.Net.Codecs.PostingsFormat for encoding all other postings data. Declaration public BloomFilteringPostingsFormat(PostingsFormat delegatePostingsFormat, BloomFilterFactory bloomFilterFactory) Parameters Type Name Description Lucene.Net.Codecs.PostingsFormat delegatePostingsFormat The Lucene.Net.Codecs.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 Lucene.Net.Index.SegmentWriteState state Returns Type Description Lucene.Net.Codecs.FieldsConsumer Overrides Lucene.Net.Codecs.PostingsFormat.FieldsConsumer(Lucene.Net.Index.SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description Lucene.Net.Index.SegmentReadState state Returns Type Description Lucene.Net.Codecs.FieldsProducer Overrides Lucene.Net.Codecs.PostingsFormat.FieldsProducer(Lucene.Net.Index.SegmentReadState)"
  },
  "Lucene.Net.Codecs.Bloom.DefaultBloomFilterFactory.html": {
    "href": "Lucene.Net.Codecs.Bloom.DefaultBloomFilterFactory.html",
    "title": "Class DefaultBloomFilterFactory | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Index.SegmentWriteState state Lucene.Net.Index.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 Lucene.Net.Index.FieldInfo fieldInfo Returns Type Description System.Boolean Overrides BloomFilterFactory.IsSaturated(FuzzySet, FieldInfo)"
  },
  "Lucene.Net.Codecs.Bloom.FuzzySet.ContainsResult.html": {
    "href": "Lucene.Net.Codecs.Bloom.FuzzySet.ContainsResult.html",
    "title": "Enum FuzzySet.ContainsResult | Apache Lucene.NET 4.8.0-beta00013 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"
  },
  "Lucene.Net.Codecs.Bloom.FuzzySet.html": {
    "href": "Lucene.Net.Codecs.Bloom.FuzzySet.html",
    "title": "Class FuzzySet | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Store.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 Lucene.Net.Store.DataOutput output Data output stream. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error."
  },
  "Lucene.Net.Codecs.Bloom.HashFunction.html": {
    "href": "Lucene.Net.Codecs.Bloom.HashFunction.html",
    "title": "Class HashFunction | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Util.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 Lucene.Net.Util.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."
  },
  "Lucene.Net.Codecs.Bloom.html": {
    "href": "Lucene.Net.Codecs.Bloom.html",
    "title": "Namespace Lucene.Net.Codecs.Bloom | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Bloom <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Codec PostingsFormat for fast access to low-frequency terms such as primary key fields. Classes BloomFilterFactory Class used to create index-time FuzzySet appropriately configured for each field. Also called to right-size bitsets for serialization. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BloomFilteringPostingsFormat A Lucene.Net.Codecs.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 Lucene.Net.Codecs.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 Lucene.Net.Codecs.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 Lucene.Net.Util.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 Lucene.Net.Util.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"
  },
  "Lucene.Net.Codecs.Bloom.MurmurHash2.html": {
    "href": "Lucene.Net.Codecs.Bloom.MurmurHash2.html",
    "title": "Class MurmurHash2 | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Util.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 Lucene.Net.Util.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."
  },
  "Lucene.Net.Codecs.DiskDV.DiskDocValuesFormat.html": {
    "href": "Lucene.Net.Codecs.DiskDV.DiskDocValuesFormat.html",
    "title": "Class DiskDocValuesFormat | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.DocValuesFormat DiskDocValuesFormat Inherited Members Lucene.Net.Codecs.DocValuesFormat.SetDocValuesFormatFactory(Lucene.Net.Codecs.IDocValuesFormatFactory) Lucene.Net.Codecs.DocValuesFormat.GetDocValuesFormatFactory() Lucene.Net.Codecs.DocValuesFormat.Name Lucene.Net.Codecs.DocValuesFormat.ToString() DocValuesFormat.ForName(String) Lucene.Net.Codecs.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 Lucene.Net.Index.SegmentWriteState state Returns Type Description Lucene.Net.Codecs.DocValuesConsumer Overrides Lucene.Net.Codecs.DocValuesFormat.FieldsConsumer(Lucene.Net.Index.SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description Lucene.Net.Index.SegmentReadState state Returns Type Description Lucene.Net.Codecs.DocValuesProducer Overrides Lucene.Net.Codecs.DocValuesFormat.FieldsProducer(Lucene.Net.Index.SegmentReadState)"
  },
  "Lucene.Net.Codecs.DiskDV.DiskNormsFormat.html": {
    "href": "Lucene.Net.Codecs.DiskDV.DiskNormsFormat.html",
    "title": "Class DiskNormsFormat | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class DiskNormsFormat Norms format that keeps all norms on disk. Inheritance System.Object Lucene.Net.Codecs.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 Lucene.Net.Index.SegmentWriteState state Returns Type Description Lucene.Net.Codecs.DocValuesConsumer Overrides Lucene.Net.Codecs.NormsFormat.NormsConsumer(Lucene.Net.Index.SegmentWriteState) | Improve this Doc View Source NormsProducer(SegmentReadState) Declaration public override DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description Lucene.Net.Index.SegmentReadState state Returns Type Description Lucene.Net.Codecs.DocValuesProducer Overrides Lucene.Net.Codecs.NormsFormat.NormsProducer(Lucene.Net.Index.SegmentReadState)"
  },
  "Lucene.Net.Codecs.DiskDV.html": {
    "href": "Lucene.Net.Codecs.DiskDV.html",
    "title": "Namespace Lucene.Net.Codecs.DiskDV | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.DiskDV <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> DocValuesFormat that accesses values directly from disk. Classes DiskDocValuesFormat DocValues format that keeps most things on disk. Only things like disk offsets are loaded into ram. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DiskNormsFormat Norms format that keeps all norms on disk."
  },
  "Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexInput.html": {
    "href": "Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexInput.html",
    "title": "Class FixedInt32BlockIndexInput | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FixedInt32BlockIndexInput Abstract base class that reads fixed-size blocks of ints from an Lucene.Net.Store.IndexInput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexInput inside Lucene.Net.Store.Directory . Wrapping a generic Lucene.Net.Store.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 protected FixedInt32BlockIndexInput(IndexInput in) Parameters Type Name Description Lucene.Net.Store.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 Lucene.Net.Store.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"
  },
  "Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexInput.IBlockReader.html": {
    "href": "Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexInput.IBlockReader.html",
    "title": "Interface FixedInt32BlockIndexInput.IBlockReader | Apache Lucene.NET 4.8.0-beta00013 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()"
  },
  "Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexOutput.html": {
    "href": "Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexOutput.html",
    "title": "Class FixedInt32BlockIndexOutput | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FixedInt32BlockIndexOutput Abstract base class that writes fixed-size blocks of ints to an Lucene.Net.Store.IndexOutput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexOutput inside Lucene.Net.Store.Directory . Wrapping a generic Lucene.Net.Store.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 Lucene.Net.Store.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 Lucene.Net.Store.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"
  },
  "Lucene.Net.Codecs.IntBlock.html": {
    "href": "Lucene.Net.Codecs.IntBlock.html",
    "title": "Namespace Lucene.Net.Codecs.IntBlock | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.IntBlock <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Intblock: base support for fixed or variable length block integer encoders Classes FixedInt32BlockIndexInput Abstract base class that reads fixed-size blocks of ints from an Lucene.Net.Store.IndexInput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexInput inside Lucene.Net.Store.Directory . Wrapping a generic Lucene.Net.Store.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 Lucene.Net.Store.IndexOutput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexOutput inside Lucene.Net.Store.Directory . Wrapping a generic Lucene.Net.Store.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 Lucene.Net.Store.IndexInput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexInput inside Lucene.Net.Store.Directory . Wrapping a generic Lucene.Net.Store.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 Lucene.Net.Store.IndexOutput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexOutput inside Lucene.Net.Store.Directory . Wrapping a generic Lucene.Net.Store.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() ."
  },
  "Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexInput.html": {
    "href": "Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexInput.html",
    "title": "Class VariableInt32BlockIndexInput | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class VariableInt32BlockIndexInput Abstract base class that reads variable-size blocks of ints from an Lucene.Net.Store.IndexInput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexInput inside Lucene.Net.Store.Directory . Wrapping a generic Lucene.Net.Store.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 Lucene.Net.Store.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 Lucene.Net.Store.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"
  },
  "Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexInput.IBlockReader.html": {
    "href": "Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexInput.IBlockReader.html",
    "title": "Interface VariableInt32BlockIndexInput.IBlockReader | Apache Lucene.NET 4.8.0-beta00013 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"
  },
  "Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexOutput.html": {
    "href": "Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexOutput.html",
    "title": "Class VariableInt32BlockIndexOutput | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class VariableInt32BlockIndexOutput Abstract base class that writes variable-size blocks of ints to an Lucene.Net.Store.IndexOutput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexOutput inside Lucene.Net.Store.Directory . Wrapping a generic Lucene.Net.Store.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 Lucene.Net.Store.IndexOutput output System.Int32 maxBlockSize Fields | Improve this Doc View Source m_output Declaration protected readonly IndexOutput m_output Field Value Type Description Lucene.Net.Store.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"
  },
  "Lucene.Net.Codecs.Memory.DirectDocValuesFormat.html": {
    "href": "Lucene.Net.Codecs.Memory.DirectDocValuesFormat.html",
    "title": "Class DirectDocValuesFormat | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.DocValuesFormat DirectDocValuesFormat Inherited Members Lucene.Net.Codecs.DocValuesFormat.SetDocValuesFormatFactory(Lucene.Net.Codecs.IDocValuesFormatFactory) Lucene.Net.Codecs.DocValuesFormat.GetDocValuesFormatFactory() Lucene.Net.Codecs.DocValuesFormat.Name Lucene.Net.Codecs.DocValuesFormat.ToString() DocValuesFormat.ForName(String) Lucene.Net.Codecs.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 Lucene.Net.Index.SegmentWriteState state Returns Type Description Lucene.Net.Codecs.DocValuesConsumer Overrides Lucene.Net.Codecs.DocValuesFormat.FieldsConsumer(Lucene.Net.Index.SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description Lucene.Net.Index.SegmentReadState state Returns Type Description Lucene.Net.Codecs.DocValuesProducer Overrides Lucene.Net.Codecs.DocValuesFormat.FieldsProducer(Lucene.Net.Index.SegmentReadState)"
  },
  "Lucene.Net.Codecs.Memory.DirectPostingsFormat.html": {
    "href": "Lucene.Net.Codecs.Memory.DirectPostingsFormat.html",
    "title": "Class DirectPostingsFormat | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class DirectPostingsFormat Wraps Lucene41PostingsFormat format for on-disk storage, but then at read time loads and stores all terms & postings directly in RAM as byte[], int[]. WARNING : This is exceptionally RAM intensive: it makes no effort to compress the postings data, storing terms as separate byte[] and postings as separate int[], but as a result it gives substantial increase in search performance. This postings format supports Ord and SeekExact(Int64) . Because this holds all term bytes as a single byte[], you cannot have more than 2.1GB worth of term bytes in a single segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lucene.Net.Codecs.PostingsFormat DirectPostingsFormat Inherited Members Lucene.Net.Codecs.PostingsFormat.EMPTY Lucene.Net.Codecs.PostingsFormat.SetPostingsFormatFactory(Lucene.Net.Codecs.IPostingsFormatFactory) Lucene.Net.Codecs.PostingsFormat.GetPostingsFormatFactory() Lucene.Net.Codecs.PostingsFormat.Name Lucene.Net.Codecs.PostingsFormat.ToString() PostingsFormat.ForName(String) Lucene.Net.Codecs.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 Lucene.Net.Index.SegmentWriteState state Returns Type Description Lucene.Net.Codecs.FieldsConsumer Overrides Lucene.Net.Codecs.PostingsFormat.FieldsConsumer(Lucene.Net.Index.SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description Lucene.Net.Index.SegmentReadState state Returns Type Description Lucene.Net.Codecs.FieldsProducer Overrides Lucene.Net.Codecs.PostingsFormat.FieldsProducer(Lucene.Net.Index.SegmentReadState)"
  },
  "Lucene.Net.Codecs.Memory.FSTOrdPostingsFormat.html": {
    "href": "Lucene.Net.Codecs.Memory.FSTOrdPostingsFormat.html",
    "title": "Class FSTOrdPostingsFormat | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FSTOrdPostingsFormat FSTOrd term dict + Lucene41PBF Inheritance System.Object Lucene.Net.Codecs.PostingsFormat FSTOrdPostingsFormat Inherited Members Lucene.Net.Codecs.PostingsFormat.EMPTY Lucene.Net.Codecs.PostingsFormat.SetPostingsFormatFactory(Lucene.Net.Codecs.IPostingsFormatFactory) Lucene.Net.Codecs.PostingsFormat.GetPostingsFormatFactory() Lucene.Net.Codecs.PostingsFormat.Name PostingsFormat.ForName(String) Lucene.Net.Codecs.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 Lucene.Net.Index.SegmentWriteState state Returns Type Description Lucene.Net.Codecs.FieldsConsumer Overrides Lucene.Net.Codecs.PostingsFormat.FieldsConsumer(Lucene.Net.Index.SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description Lucene.Net.Index.SegmentReadState state Returns Type Description Lucene.Net.Codecs.FieldsProducer Overrides Lucene.Net.Codecs.PostingsFormat.FieldsProducer(Lucene.Net.Index.SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Lucene.Net.Codecs.PostingsFormat.ToString()"
  },
  "Lucene.Net.Codecs.Memory.FSTOrdPulsing41PostingsFormat.html": {
    "href": "Lucene.Net.Codecs.Memory.FSTOrdPulsing41PostingsFormat.html",
    "title": "Class FSTOrdPulsing41PostingsFormat | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FSTOrdPulsing41PostingsFormat FSTOrd + Pulsing41 This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lucene.Net.Codecs.PostingsFormat FSTOrdPulsing41PostingsFormat Inherited Members Lucene.Net.Codecs.PostingsFormat.EMPTY Lucene.Net.Codecs.PostingsFormat.SetPostingsFormatFactory(Lucene.Net.Codecs.IPostingsFormatFactory) Lucene.Net.Codecs.PostingsFormat.GetPostingsFormatFactory() Lucene.Net.Codecs.PostingsFormat.Name Lucene.Net.Codecs.PostingsFormat.ToString() PostingsFormat.ForName(String) Lucene.Net.Codecs.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 Lucene.Net.Index.SegmentWriteState state Returns Type Description Lucene.Net.Codecs.FieldsConsumer Overrides Lucene.Net.Codecs.PostingsFormat.FieldsConsumer(Lucene.Net.Index.SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description Lucene.Net.Index.SegmentReadState state Returns Type Description Lucene.Net.Codecs.FieldsProducer Overrides Lucene.Net.Codecs.PostingsFormat.FieldsProducer(Lucene.Net.Index.SegmentReadState)"
  },
  "Lucene.Net.Codecs.Memory.FSTOrdTermsReader.html": {
    "href": "Lucene.Net.Codecs.Memory.FSTOrdTermsReader.html",
    "title": "Class FSTOrdTermsReader | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Index.Fields Lucene.Net.Codecs.FieldsProducer FSTOrdTermsReader Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable System.IDisposable Inherited Members Lucene.Net.Codecs.FieldsProducer.Dispose() Lucene.Net.Index.Fields.System.Collections.IEnumerable.GetEnumerator() Lucene.Net.Index.Fields.UniqueTermCount Lucene.Net.Index.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 Lucene.Net.Index.SegmentReadState state Lucene.Net.Codecs.PostingsReaderBase postingsReader Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Lucene.Net.Index.Fields.Count Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides Lucene.Net.Codecs.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 Lucene.Net.Index.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 Lucene.Net.Index.Terms Overrides Fields.GetTerms(String) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides Lucene.Net.Codecs.FieldsProducer.RamBytesUsed() Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IDisposable"
  },
  "Lucene.Net.Codecs.Memory.FSTOrdTermsWriter.html": {
    "href": "Lucene.Net.Codecs.Memory.FSTOrdTermsWriter.html",
    "title": "Class FSTOrdTermsWriter | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FSTOrdTermsWriter FST-based term dict, using ord as FST output. The FST holds the mapping between <term, ord>, and term's metadata is delta encoded into a single byte block. Typically the byte block consists of four parts: term statistics: docFreq, totalTermFreq; monotonic long[], e.g. the pointer to the postings list for that term; generic byte[], e.g. other information customized by postings base. single-level skip list to speed up metadata decoding by ord. Files: .tix : Term Index .tbk : Term Block Term Index The .tix contains a list of FSTs, one for each field. The FST maps a term to its corresponding order in current field. TermIndex(.tix) --> Header, TermFST NumFields , Footer TermFST --> FST<T> Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Since terms are already sorted before writing to Term Block , their ords can directly used to seek term metadata from term block. Term Block The .tbk contains all the statistics and metadata for terms, along with field summary (e.g. per-field data like number of documents in current field). For each field, there are four blocks: statistics bytes block: contains term statistics; metadata longs block: delta-encodes monotonic part of metadata; metadata bytes block: encodes other parts of metadata; skip block: contains skip data, to speed up metadata seeking and decoding File Format: TermBlock(.tbk) --> Header, PostingsHeader , FieldSummary, DirOffset FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, DataBlock > NumFields , Footer DataBlock --> StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, SkipBlock, StatsBlock, MetaLongsBlock, MetaBytesBlock SkipBlock --> < StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipDelta LongsSize > NumTerms StatsBlock --> < DocFreq[Same?], (TotalTermFreq-DocFreq) ? > NumTerms MetaLongsBlock --> < LongDelta LongsSize , BytesSize > NumTerms MetaBytesBlock --> Byte MetaBytesBlockLength Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DirOffset --> Uint64 ( WriteInt64(Int64) ) NumFields, FieldNumber, DocCount, DocFreq, LongsSize, FieldNumber, DocCount --> VInt ( WriteVInt32(Int32) ) NumTerms, SumTotalTermFreq, SumDocFreq, StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipStart, TotalTermFreq, LongDelta,--> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: The format of PostingsHeader and MetaBytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data). During initialization the reader will load all the blocks into memory. SkipBlock will be decoded, so that during seek term dict can lookup file pointers directly. StatsFPDelta, MetaLongsSkipFPDelta, etc. are file offset for every SkipInterval's term. MetaLongsSkipDelta is the difference from previous one, which indicates the value of preceding metadata longs for every SkipInterval's term. DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. Usually these two values are the same for long tail terms, therefore one bit is stole from DocFreq to check this case, so that encoding of TotalTermFreq may be omitted. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lucene.Net.Codecs.FieldsConsumer FSTOrdTermsWriter Implements System.IDisposable Inherited Members Lucene.Net.Codecs.FieldsConsumer.Dispose() Lucene.Net.Codecs.FieldsConsumer.Merge(Lucene.Net.Index.MergeState, Lucene.Net.Index.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 Lucene.Net.Index.SegmentWriteState state Lucene.Net.Codecs.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 Lucene.Net.Index.FieldInfo field Returns Type Description Lucene.Net.Codecs.TermsConsumer Overrides Lucene.Net.Codecs.FieldsConsumer.AddField(Lucene.Net.Index.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"
  },
  "Lucene.Net.Codecs.Memory.FSTPostingsFormat.html": {
    "href": "Lucene.Net.Codecs.Memory.FSTPostingsFormat.html",
    "title": "Class FSTPostingsFormat | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FSTPostingsFormat FST term dict + Lucene41PBF Inheritance System.Object Lucene.Net.Codecs.PostingsFormat FSTPostingsFormat Inherited Members Lucene.Net.Codecs.PostingsFormat.EMPTY Lucene.Net.Codecs.PostingsFormat.SetPostingsFormatFactory(Lucene.Net.Codecs.IPostingsFormatFactory) Lucene.Net.Codecs.PostingsFormat.GetPostingsFormatFactory() Lucene.Net.Codecs.PostingsFormat.Name PostingsFormat.ForName(String) Lucene.Net.Codecs.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 Lucene.Net.Index.SegmentWriteState state Returns Type Description Lucene.Net.Codecs.FieldsConsumer Overrides Lucene.Net.Codecs.PostingsFormat.FieldsConsumer(Lucene.Net.Index.SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description Lucene.Net.Index.SegmentReadState state Returns Type Description Lucene.Net.Codecs.FieldsProducer Overrides Lucene.Net.Codecs.PostingsFormat.FieldsProducer(Lucene.Net.Index.SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Lucene.Net.Codecs.PostingsFormat.ToString()"
  },
  "Lucene.Net.Codecs.Memory.FSTPulsing41PostingsFormat.html": {
    "href": "Lucene.Net.Codecs.Memory.FSTPulsing41PostingsFormat.html",
    "title": "Class FSTPulsing41PostingsFormat | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FSTPulsing41PostingsFormat FST + Pulsing41, test only, since FST does no delta encoding here! This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lucene.Net.Codecs.PostingsFormat FSTPulsing41PostingsFormat Inherited Members Lucene.Net.Codecs.PostingsFormat.EMPTY Lucene.Net.Codecs.PostingsFormat.SetPostingsFormatFactory(Lucene.Net.Codecs.IPostingsFormatFactory) Lucene.Net.Codecs.PostingsFormat.GetPostingsFormatFactory() Lucene.Net.Codecs.PostingsFormat.Name Lucene.Net.Codecs.PostingsFormat.ToString() PostingsFormat.ForName(String) Lucene.Net.Codecs.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 Lucene.Net.Index.SegmentWriteState state Returns Type Description Lucene.Net.Codecs.FieldsConsumer Overrides Lucene.Net.Codecs.PostingsFormat.FieldsConsumer(Lucene.Net.Index.SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description Lucene.Net.Index.SegmentReadState state Returns Type Description Lucene.Net.Codecs.FieldsProducer Overrides Lucene.Net.Codecs.PostingsFormat.FieldsProducer(Lucene.Net.Index.SegmentReadState)"
  },
  "Lucene.Net.Codecs.Memory.FSTTermsReader.html": {
    "href": "Lucene.Net.Codecs.Memory.FSTTermsReader.html",
    "title": "Class FSTTermsReader | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Index.Fields Lucene.Net.Codecs.FieldsProducer FSTTermsReader Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable System.IDisposable Inherited Members Lucene.Net.Codecs.FieldsProducer.Dispose() Lucene.Net.Index.Fields.System.Collections.IEnumerable.GetEnumerator() Lucene.Net.Index.Fields.UniqueTermCount Lucene.Net.Index.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 Lucene.Net.Index.SegmentReadState state Lucene.Net.Codecs.PostingsReaderBase postingsReader Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Lucene.Net.Index.Fields.Count Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides Lucene.Net.Codecs.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 Lucene.Net.Index.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 Lucene.Net.Index.Terms Overrides Fields.GetTerms(String) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides Lucene.Net.Codecs.FieldsProducer.RamBytesUsed() Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IDisposable"
  },
  "Lucene.Net.Codecs.Memory.FSTTermsWriter.html": {
    "href": "Lucene.Net.Codecs.Memory.FSTTermsWriter.html",
    "title": "Class FSTTermsWriter | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.FieldsConsumer FSTTermsWriter Implements System.IDisposable Inherited Members Lucene.Net.Codecs.FieldsConsumer.Dispose() Lucene.Net.Codecs.FieldsConsumer.Merge(Lucene.Net.Index.MergeState, Lucene.Net.Index.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 Lucene.Net.Index.SegmentWriteState state Lucene.Net.Codecs.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 Lucene.Net.Index.FieldInfo field Returns Type Description Lucene.Net.Codecs.TermsConsumer Overrides Lucene.Net.Codecs.FieldsConsumer.AddField(Lucene.Net.Index.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"
  },
  "Lucene.Net.Codecs.Memory.html": {
    "href": "Lucene.Net.Codecs.Memory.html",
    "title": "Namespace Lucene.Net.Codecs.Memory | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Memory <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Term dictionary, DocValues or Postings formats that are read entirely into memory. Classes DirectDocValuesFormat In-memory docvalues format that does no (or very little) compression. Indexed values are stored on disk, but then at search time all values are loaded into memory as simple .NET arrays. For numeric values, it uses byte[], short[], int[], long[] as necessary to fit the range of the values. For binary values, there is an System.Int32 (4 bytes) overhead per value. Limitations: For binary and sorted fields the total space required for all binary values cannot exceed about 2.1 GB (see MAX_TOTAL_BYTES_LENGTH ). For sorted set fields, the sum of the size of each document's set of values cannot exceed about 2.1 B values (see MAX_SORTED_SET_ORDS ). For example, if every document has 10 values (10 instances of SortedSetDocValuesField ) added, then no more than ~210 M documents can be added to one segment. DirectPostingsFormat Wraps Lucene41PostingsFormat format for on-disk storage, but then at read time loads and stores all terms & postings directly in RAM as byte[], int[]. WARNING : This is exceptionally RAM intensive: it makes no effort to compress the postings data, storing terms as separate byte[] and postings as separate int[], but as a result it gives substantial increase in search performance. This postings format supports Ord and SeekExact(Int64) . Because this holds all term bytes as a single byte[], you cannot have more than 2.1GB worth of term bytes in a single segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTOrdPostingsFormat FSTOrd term dict + Lucene41PBF FSTOrdPulsing41PostingsFormat FSTOrd + Pulsing41 This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTOrdTermsReader FST-based terms dictionary reader. The FST index maps each term and its ord, and during seek the ord is used fetch metadata from a single block. The term dictionary is fully memory resident. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTOrdTermsWriter FST-based term dict, using ord as FST output. The FST holds the mapping between <term, ord>, and term's metadata is delta encoded into a single byte block. Typically the byte block consists of four parts: term statistics: docFreq, totalTermFreq; monotonic long[], e.g. the pointer to the postings list for that term; generic byte[], e.g. other information customized by postings base. single-level skip list to speed up metadata decoding by ord. Files: .tix : Term Index .tbk : Term Block Term Index The .tix contains a list of FSTs, one for each field. The FST maps a term to its corresponding order in current field. TermIndex(.tix) --> Header, TermFST NumFields , Footer TermFST --> FST<T> Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Since terms are already sorted before writing to Term Block , their ords can directly used to seek term metadata from term block. Term Block The .tbk contains all the statistics and metadata for terms, along with field summary (e.g. per-field data like number of documents in current field). For each field, there are four blocks: statistics bytes block: contains term statistics; metadata longs block: delta-encodes monotonic part of metadata; metadata bytes block: encodes other parts of metadata; skip block: contains skip data, to speed up metadata seeking and decoding File Format: TermBlock(.tbk) --> Header, PostingsHeader , FieldSummary, DirOffset FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, DataBlock > NumFields , Footer DataBlock --> StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, SkipBlock, StatsBlock, MetaLongsBlock, MetaBytesBlock SkipBlock --> < StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipDelta LongsSize > NumTerms StatsBlock --> < DocFreq[Same?], (TotalTermFreq-DocFreq) ? > NumTerms MetaLongsBlock --> < LongDelta LongsSize , BytesSize > NumTerms MetaBytesBlock --> Byte MetaBytesBlockLength Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DirOffset --> Uint64 ( WriteInt64(Int64) ) NumFields, FieldNumber, DocCount, DocFreq, LongsSize, FieldNumber, DocCount --> VInt ( WriteVInt32(Int32) ) NumTerms, SumTotalTermFreq, SumDocFreq, StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipStart, TotalTermFreq, LongDelta,--> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: The format of PostingsHeader and MetaBytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data). During initialization the reader will load all the blocks into memory. SkipBlock will be decoded, so that during seek term dict can lookup file pointers directly. StatsFPDelta, MetaLongsSkipFPDelta, etc. are file offset for every SkipInterval's term. MetaLongsSkipDelta is the difference from previous one, which indicates the value of preceding metadata longs for every SkipInterval's term. DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. Usually these two values are the same for long tail terms, therefore one bit is stole from DocFreq to check this case, so that encoding of TotalTermFreq may be omitted. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTPostingsFormat FST term dict + Lucene41PBF FSTPulsing41PostingsFormat FST + Pulsing41, test only, since FST does no delta encoding here! This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTTermsReader FST-based terms dictionary reader. The FST directly maps each term and its metadata, it is memory resident. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTTermsWriter FST-based term dict, using metadata as FST output. The FST directly holds the mapping between <term, metadata>. Term metadata consists of three parts: term statistics: docFreq, totalTermFreq; monotonic long[], e.g. the pointer to the postings list for that term; generic byte[], e.g. other information need by postings reader. File: .tst : Term Dictionary Term Dictionary The .tst contains a list of FSTs, one for each field. The FST maps a term to its corresponding statistics (e.g. docfreq) and metadata (e.g. information for postings list reader like file pointer to postings list). Typically the metadata is separated into two parts: Monotonical long array: Some metadata will always be ascending in order with the corresponding term. This part is used by FST to share outputs between arcs. Generic byte array: Used to store non-monotonic metadata. File format: TermsDict(.tst) --> Header, PostingsHeader , FieldSummary, DirOffset FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, TermFST > NumFields TermFST TermData TermData --> Flag, BytesSize?, LongDelta LongsSize ?, Byte BytesSize ?, < DocFreq[Same?], (TotalTermFreq-DocFreq) > ? Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DirOffset --> Uint64 ( WriteInt64(Int64) ) DocFreq, LongsSize, BytesSize, NumFields, FieldNumber, DocCount --> VInt ( WriteVInt32(Int32) ) TotalTermFreq, NumTerms, SumTotalTermFreq, SumDocFreq, LongDelta --> VLong ( WriteVInt64(Int64) ) Notes: The format of PostingsHeader and generic meta bytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data). The format of TermData is determined by FST, typically monotonic metadata will be dense around shallow arcs, while in deeper arcs only generic bytes and term statistics exist. The byte Flag is used to indicate which part of metadata exists on current arc. Specially the monotonic part is omitted when it is an array of 0s. Since LongsSize is per-field fixed, it is only written once in field summary. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MemoryDocValuesFormat In-memory docvalues format. MemoryPostingsFormat Stores terms & postings (docs, positions, payloads) in RAM, using an FST. Note that this codec implements advance as a linear scan! This means if you store large fields in here, queries that rely on advance will (AND BooleanQuery, PhraseQuery) will be relatively slow! This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "Lucene.Net.Codecs.Memory.MemoryDocValuesFormat.html": {
    "href": "Lucene.Net.Codecs.Memory.MemoryDocValuesFormat.html",
    "title": "Class MemoryDocValuesFormat | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class MemoryDocValuesFormat In-memory docvalues format. Inheritance System.Object Lucene.Net.Codecs.DocValuesFormat MemoryDocValuesFormat Inherited Members Lucene.Net.Codecs.DocValuesFormat.SetDocValuesFormatFactory(Lucene.Net.Codecs.IDocValuesFormatFactory) Lucene.Net.Codecs.DocValuesFormat.GetDocValuesFormatFactory() Lucene.Net.Codecs.DocValuesFormat.Name Lucene.Net.Codecs.DocValuesFormat.ToString() DocValuesFormat.ForName(String) Lucene.Net.Codecs.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 Lucene.Net.Index.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 Lucene.Net.Index.SegmentWriteState state Returns Type Description Lucene.Net.Codecs.DocValuesConsumer Overrides Lucene.Net.Codecs.DocValuesFormat.FieldsConsumer(Lucene.Net.Index.SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description Lucene.Net.Index.SegmentReadState state Returns Type Description Lucene.Net.Codecs.DocValuesProducer Overrides Lucene.Net.Codecs.DocValuesFormat.FieldsProducer(Lucene.Net.Index.SegmentReadState)"
  },
  "Lucene.Net.Codecs.Memory.MemoryPostingsFormat.html": {
    "href": "Lucene.Net.Codecs.Memory.MemoryPostingsFormat.html",
    "title": "Class MemoryPostingsFormat | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class MemoryPostingsFormat Stores terms & postings (docs, positions, payloads) in RAM, using an FST. Note that this codec implements advance as a linear scan! This means if you store large fields in here, queries that rely on advance will (AND BooleanQuery, PhraseQuery) will be relatively slow! This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lucene.Net.Codecs.PostingsFormat MemoryPostingsFormat Inherited Members Lucene.Net.Codecs.PostingsFormat.EMPTY Lucene.Net.Codecs.PostingsFormat.SetPostingsFormatFactory(Lucene.Net.Codecs.IPostingsFormatFactory) Lucene.Net.Codecs.PostingsFormat.GetPostingsFormatFactory() Lucene.Net.Codecs.PostingsFormat.Name PostingsFormat.ForName(String) Lucene.Net.Codecs.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 Lucene.Net.Index.SegmentWriteState state Returns Type Description Lucene.Net.Codecs.FieldsConsumer Overrides Lucene.Net.Codecs.PostingsFormat.FieldsConsumer(Lucene.Net.Index.SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description Lucene.Net.Index.SegmentReadState state Returns Type Description Lucene.Net.Codecs.FieldsProducer Overrides Lucene.Net.Codecs.PostingsFormat.FieldsProducer(Lucene.Net.Index.SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Lucene.Net.Codecs.PostingsFormat.ToString()"
  },
  "Lucene.Net.Codecs.Pulsing.html": {
    "href": "Lucene.Net.Codecs.Pulsing.html",
    "title": "Namespace Lucene.Net.Codecs.Pulsing | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Pulsing <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Pulsing Codec: inlines low frequency terms' postings into terms dictionary. Classes Pulsing41PostingsFormat Concrete pulsing implementation over Lucene41PostingsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk PulsingPostingsFormat This postings format \"inlines\" the postings for terms that have low docFreq. It wraps another postings format, which is used for writing the non-inlined terms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PulsingPostingsReader Concrete class that reads the current doc/freq/skip postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PulsingPostingsReader.PulsingEnumAttribute Implementation of PulsingPostingsReader.PulsingEnumAttribute for reuse of wrapped postings readers underneath pulsing. This is a Lucene.NET INTERNAL API, use at your own risk PulsingPostingsWriter Writer for the pulsing format. Wraps another postings implementation and decides (based on total number of occurrences), whether a terms postings should be inlined into the term dictionary, or passed through to the wrapped writer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces PulsingPostingsReader.IPulsingEnumAttribute A per-docsenum attribute that stores additional reuse information so that pulsing enums can keep a reference to their wrapped enums, and vice versa. this way we can always reuse. This is a Lucene.NET INTERNAL API, use at your own risk"
  },
  "Lucene.Net.Codecs.Pulsing.Pulsing41PostingsFormat.html": {
    "href": "Lucene.Net.Codecs.Pulsing.Pulsing41PostingsFormat.html",
    "title": "Class Pulsing41PostingsFormat | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class Pulsing41PostingsFormat Concrete pulsing implementation over Lucene41PostingsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lucene.Net.Codecs.PostingsFormat PulsingPostingsFormat Pulsing41PostingsFormat Inherited Members PulsingPostingsFormat.ToString() PulsingPostingsFormat.FieldsConsumer(SegmentWriteState) PulsingPostingsFormat.FieldsProducer(SegmentReadState) PulsingPostingsFormat.FreqCutoff Lucene.Net.Codecs.PostingsFormat.EMPTY Lucene.Net.Codecs.PostingsFormat.SetPostingsFormatFactory(Lucene.Net.Codecs.IPostingsFormatFactory) Lucene.Net.Codecs.PostingsFormat.GetPostingsFormatFactory() Lucene.Net.Codecs.PostingsFormat.Name PostingsFormat.ForName(String) Lucene.Net.Codecs.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"
  },
  "Lucene.Net.Codecs.Pulsing.PulsingPostingsFormat.html": {
    "href": "Lucene.Net.Codecs.Pulsing.PulsingPostingsFormat.html",
    "title": "Class PulsingPostingsFormat | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class PulsingPostingsFormat This postings format \"inlines\" the postings for terms that have low docFreq. It wraps another postings format, which is used for writing the non-inlined terms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lucene.Net.Codecs.PostingsFormat PulsingPostingsFormat Pulsing41PostingsFormat Inherited Members Lucene.Net.Codecs.PostingsFormat.EMPTY Lucene.Net.Codecs.PostingsFormat.SetPostingsFormatFactory(Lucene.Net.Codecs.IPostingsFormatFactory) Lucene.Net.Codecs.PostingsFormat.GetPostingsFormatFactory() Lucene.Net.Codecs.PostingsFormat.Name PostingsFormat.ForName(String) Lucene.Net.Codecs.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 protected PulsingPostingsFormat(PostingsBaseFormat wrappedPostingsBaseFormat, int freqCutoff) Parameters Type Name Description Lucene.Net.Codecs.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 protected PulsingPostingsFormat(PostingsBaseFormat wrappedPostingsBaseFormat, int freqCutoff, int minBlockSize, int maxBlockSize) Parameters Type Name Description Lucene.Net.Codecs.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 Lucene.Net.Index.SegmentWriteState state Returns Type Description Lucene.Net.Codecs.FieldsConsumer Overrides Lucene.Net.Codecs.PostingsFormat.FieldsConsumer(Lucene.Net.Index.SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description Lucene.Net.Index.SegmentReadState state Returns Type Description Lucene.Net.Codecs.FieldsProducer Overrides Lucene.Net.Codecs.PostingsFormat.FieldsProducer(Lucene.Net.Index.SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Lucene.Net.Codecs.PostingsFormat.ToString()"
  },
  "Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.html": {
    "href": "Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.html",
    "title": "Class PulsingPostingsReader | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.PostingsReaderBase PulsingPostingsReader Implements System.IDisposable Inherited Members Lucene.Net.Codecs.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 Lucene.Net.Index.SegmentReadState state Lucene.Net.Codecs.PostingsReaderBase wrappedPostingsReader Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides Lucene.Net.Codecs.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 Lucene.Net.Store.DataInput input Lucene.Net.Index.FieldInfo fieldInfo Lucene.Net.Codecs.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 Lucene.Net.Index.FieldInfo field Lucene.Net.Codecs.BlockTermState termState Lucene.Net.Util.IBits liveDocs Lucene.Net.Index.DocsEnum reuse Lucene.Net.Index.DocsFlags flags Returns Type Description Lucene.Net.Index.DocsEnum Overrides Lucene.Net.Codecs.PostingsReaderBase.Docs(Lucene.Net.Index.FieldInfo, Lucene.Net.Codecs.BlockTermState, Lucene.Net.Util.IBits, Lucene.Net.Index.DocsEnum, Lucene.Net.Index.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 Lucene.Net.Index.FieldInfo field Lucene.Net.Codecs.BlockTermState termState Lucene.Net.Util.IBits liveDocs Lucene.Net.Index.DocsAndPositionsEnum reuse Lucene.Net.Index.DocsAndPositionsFlags flags Returns Type Description Lucene.Net.Index.DocsAndPositionsEnum Overrides Lucene.Net.Codecs.PostingsReaderBase.DocsAndPositions(Lucene.Net.Index.FieldInfo, Lucene.Net.Codecs.BlockTermState, Lucene.Net.Util.IBits, Lucene.Net.Index.DocsAndPositionsEnum, Lucene.Net.Index.DocsAndPositionsFlags) | Improve this Doc View Source Init(IndexInput) Declaration public override void Init(IndexInput termsIn) Parameters Type Name Description Lucene.Net.Store.IndexInput termsIn Overrides Lucene.Net.Codecs.PostingsReaderBase.Init(Lucene.Net.Store.IndexInput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description Lucene.Net.Codecs.BlockTermState Overrides Lucene.Net.Codecs.PostingsReaderBase.NewTermState() | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides Lucene.Net.Codecs.PostingsReaderBase.RamBytesUsed() Implements System.IDisposable"
  },
  "Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.IPulsingEnumAttribute.html": {
    "href": "Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.IPulsingEnumAttribute.html",
    "title": "Interface PulsingPostingsReader.IPulsingEnumAttribute | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface PulsingPostingsReader.IPulsingEnumAttribute A per-docsenum attribute that stores additional reuse information so that pulsing enums can keep a reference to their wrapped enums, and vice versa. this way we can always reuse. This is a Lucene.NET INTERNAL API, use at your own risk Inherited Members Lucene.Net.Util.IAttribute.CopyTo(Lucene.Net.Util.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 , Lucene.Net.Index.DocsEnum >"
  },
  "Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.PulsingEnumAttribute.html": {
    "href": "Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.PulsingEnumAttribute.html",
    "title": "Class PulsingPostingsReader.PulsingEnumAttribute | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Util.Attribute PulsingPostingsReader.PulsingEnumAttribute Implements PulsingPostingsReader.IPulsingEnumAttribute Lucene.Net.Util.IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Lucene.Net.Util.Attribute.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.Attribute.ToString() Lucene.Net.Util.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 , Lucene.Net.Index.DocsEnum > Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Lucene.Net.Util.Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description Lucene.Net.Util.IAttribute target Overrides Lucene.Net.Util.Attribute.CopyTo(Lucene.Net.Util.IAttribute) Implements PulsingPostingsReader.IPulsingEnumAttribute Lucene.Net.Util.IAttribute"
  },
  "Lucene.Net.Codecs.Pulsing.PulsingPostingsWriter.html": {
    "href": "Lucene.Net.Codecs.Pulsing.PulsingPostingsWriter.html",
    "title": "Class PulsingPostingsWriter | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.PostingsConsumer Lucene.Net.Codecs.PostingsWriterBase PulsingPostingsWriter Implements System.IDisposable Inherited Members Lucene.Net.Codecs.PostingsWriterBase.Dispose() Lucene.Net.Codecs.PostingsConsumer.Merge(Lucene.Net.Index.MergeState, Lucene.Net.Index.IndexOptions, Lucene.Net.Index.DocsEnum, Lucene.Net.Util.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 Lucene.Net.Index.SegmentWriteState state System.Int32 maxPositions Lucene.Net.Codecs.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 Lucene.Net.Util.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 Lucene.Net.Store.DataOutput output Lucene.Net.Index.FieldInfo fieldInfo Lucene.Net.Codecs.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 Lucene.Net.Codecs.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 Lucene.Net.Codecs.BlockTermState state Overrides Lucene.Net.Codecs.PostingsWriterBase.FinishTerm(Lucene.Net.Codecs.BlockTermState) | Improve this Doc View Source Init(IndexOutput) Declaration public override void Init(IndexOutput termsOut) Parameters Type Name Description Lucene.Net.Store.IndexOutput termsOut Overrides Lucene.Net.Codecs.PostingsWriterBase.Init(Lucene.Net.Store.IndexOutput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description Lucene.Net.Codecs.BlockTermState Overrides Lucene.Net.Codecs.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 Lucene.Net.Index.FieldInfo fieldInfo Returns Type Description System.Int32 Overrides Lucene.Net.Codecs.PostingsWriterBase.SetField(Lucene.Net.Index.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 Lucene.Net.Codecs.PostingsWriterBase.StartTerm() Implements System.IDisposable"
  },
  "Lucene.Net.Codecs.Sep.html": {
    "href": "Lucene.Net.Codecs.Sep.html",
    "title": "Namespace Lucene.Net.Codecs.Sep | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Sep <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Sep: base support for separate files (doc,frq,pos,skp,pyl) Classes Int32IndexInput Defines basic API for writing ints to an Lucene.Net.Store.IndexOutput . IntBlockCodec interacts with this API. See IntBlockReader. NOTE: This was IntIndexInput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Int32IndexInput.Index Records a single skip-point in the GetReader() . Int32IndexInput.Reader Reads System.Int32 values. Int32IndexOutput Defines basic API for writing ints to an Lucene.Net.Store.IndexOutput . IntBlockCodec interacts with this API. See IntBlockReader. NOTE: block sizes could be variable NOTE: This was IntIndexOutput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Int32IndexOutput.Index Records a single skip-point in the Lucene.Net.Store.IndexOutput . Int32StreamFactory Provides System.Int32 reader and writer to specified files. NOTE: This was IntStreamFactory in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk SepPostingsReader Concrete class that reads the current doc/freq/skip postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SepPostingsWriter Writes frq to .frq, docs to .doc, pos to .pos, payloads to .pyl, skip data to .skp This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "Lucene.Net.Codecs.Sep.Int32IndexInput.html": {
    "href": "Lucene.Net.Codecs.Sep.Int32IndexInput.html",
    "title": "Class Int32IndexInput | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class Int32IndexInput Defines basic API for writing ints to an Lucene.Net.Store.IndexOutput . IntBlockCodec interacts with this API. See IntBlockReader. NOTE: This was IntIndexInput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexInput FixedInt32BlockIndexInput VariableInt32BlockIndexInput Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Int32IndexInput : IDisposable Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetIndex() Declaration public abstract Int32IndexInput.Index GetIndex() Returns Type Description Int32IndexInput.Index | Improve this Doc View Source GetReader() Declaration public abstract Int32IndexInput.Reader GetReader() Returns Type Description Int32IndexInput.Reader Implements System.IDisposable"
  },
  "Lucene.Net.Codecs.Sep.Int32IndexInput.Index.html": {
    "href": "Lucene.Net.Codecs.Sep.Int32IndexInput.Index.html",
    "title": "Class Int32IndexInput.Index | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Store.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"
  },
  "Lucene.Net.Codecs.Sep.Int32IndexInput.Reader.html": {
    "href": "Lucene.Net.Codecs.Sep.Int32IndexInput.Reader.html",
    "title": "Class Int32IndexInput.Reader | Apache Lucene.NET 4.8.0-beta00013 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"
  },
  "Lucene.Net.Codecs.Sep.Int32IndexOutput.html": {
    "href": "Lucene.Net.Codecs.Sep.Int32IndexOutput.html",
    "title": "Class Int32IndexOutput | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class Int32IndexOutput Defines basic API for writing ints to an Lucene.Net.Store.IndexOutput . IntBlockCodec interacts with this API. See IntBlockReader. NOTE: block sizes could be variable NOTE: This was IntIndexOutput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexOutput FixedInt32BlockIndexOutput VariableInt32BlockIndexOutput Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Int32IndexOutput : IDisposable Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetIndex() If you are indexing the primary output file, call this and interact with the returned IndexWriter. Declaration public abstract Int32IndexOutput.Index GetIndex() Returns Type Description Int32IndexOutput.Index | Improve this Doc View Source Write(Int32) Write an System.Int32 to the primary file. The value must be = 0. Declaration public abstract void Write(int v) Parameters Type Name Description System.Int32 v Implements System.IDisposable"
  },
  "Lucene.Net.Codecs.Sep.Int32IndexOutput.Index.html": {
    "href": "Lucene.Net.Codecs.Sep.Int32IndexOutput.Index.html",
    "title": "Class Int32IndexOutput.Index | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class Int32IndexOutput.Index Records a single skip-point in the Lucene.Net.Store.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 Lucene.Net.Store.DataOutput indexOut System.Boolean absolute"
  },
  "Lucene.Net.Codecs.Sep.Int32StreamFactory.html": {
    "href": "Lucene.Net.Codecs.Sep.Int32StreamFactory.html",
    "title": "Class Int32StreamFactory | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class Int32StreamFactory Provides System.Int32 reader and writer to specified files. NOTE: This was IntStreamFactory in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32StreamFactory Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Int32StreamFactory Methods | Improve this Doc View Source CreateOutput(Directory, String, IOContext) Create an Int32IndexOutput on the provided fileName. Declaration public abstract Int32IndexOutput CreateOutput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Lucene.Net.Store.Directory dir System.String fileName Lucene.Net.Store.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 Lucene.Net.Store.Directory dir System.String fileName Lucene.Net.Store.IOContext context Returns Type Description Int32IndexInput"
  },
  "Lucene.Net.Codecs.Sep.SepPostingsReader.html": {
    "href": "Lucene.Net.Codecs.Sep.SepPostingsReader.html",
    "title": "Class SepPostingsReader | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.PostingsReaderBase SepPostingsReader Implements System.IDisposable Inherited Members Lucene.Net.Codecs.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 Lucene.Net.Store.Directory dir Lucene.Net.Index.FieldInfos fieldInfos Lucene.Net.Index.SegmentInfo segmentInfo Lucene.Net.Store.IOContext context Int32StreamFactory intFactory System.String segmentSuffix Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides Lucene.Net.Codecs.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 Lucene.Net.Store.DataInput input Lucene.Net.Index.FieldInfo fieldInfo Lucene.Net.Codecs.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 Lucene.Net.Index.FieldInfo fieldInfo Lucene.Net.Codecs.BlockTermState termState Lucene.Net.Util.IBits liveDocs Lucene.Net.Index.DocsEnum reuse Lucene.Net.Index.DocsFlags flags Returns Type Description Lucene.Net.Index.DocsEnum Overrides Lucene.Net.Codecs.PostingsReaderBase.Docs(Lucene.Net.Index.FieldInfo, Lucene.Net.Codecs.BlockTermState, Lucene.Net.Util.IBits, Lucene.Net.Index.DocsEnum, Lucene.Net.Index.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 Lucene.Net.Index.FieldInfo fieldInfo Lucene.Net.Codecs.BlockTermState termState Lucene.Net.Util.IBits liveDocs Lucene.Net.Index.DocsAndPositionsEnum reuse Lucene.Net.Index.DocsAndPositionsFlags flags Returns Type Description Lucene.Net.Index.DocsAndPositionsEnum Overrides Lucene.Net.Codecs.PostingsReaderBase.DocsAndPositions(Lucene.Net.Index.FieldInfo, Lucene.Net.Codecs.BlockTermState, Lucene.Net.Util.IBits, Lucene.Net.Index.DocsAndPositionsEnum, Lucene.Net.Index.DocsAndPositionsFlags) | Improve this Doc View Source Init(IndexInput) Declaration public override void Init(IndexInput termsIn) Parameters Type Name Description Lucene.Net.Store.IndexInput termsIn Overrides Lucene.Net.Codecs.PostingsReaderBase.Init(Lucene.Net.Store.IndexInput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description Lucene.Net.Codecs.BlockTermState Overrides Lucene.Net.Codecs.PostingsReaderBase.NewTermState() | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides Lucene.Net.Codecs.PostingsReaderBase.RamBytesUsed() Implements System.IDisposable"
  },
  "Lucene.Net.Codecs.Sep.SepPostingsWriter.html": {
    "href": "Lucene.Net.Codecs.Sep.SepPostingsWriter.html",
    "title": "Class SepPostingsWriter | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class SepPostingsWriter Writes frq to .frq, docs to .doc, pos to .pos, payloads to .pyl, skip data to .skp This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lucene.Net.Codecs.PostingsConsumer Lucene.Net.Codecs.PostingsWriterBase SepPostingsWriter Implements System.IDisposable Inherited Members Lucene.Net.Codecs.PostingsWriterBase.Dispose() Lucene.Net.Codecs.PostingsConsumer.Merge(Lucene.Net.Index.MergeState, Lucene.Net.Index.IndexOptions, Lucene.Net.Index.DocsEnum, Lucene.Net.Util.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 Lucene.Net.Index.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 Lucene.Net.Index.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 Lucene.Net.Util.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 Lucene.Net.Store.DataOutput output Lucene.Net.Index.FieldInfo fi Lucene.Net.Codecs.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 Lucene.Net.Codecs.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 Lucene.Net.Codecs.BlockTermState state Overrides Lucene.Net.Codecs.PostingsWriterBase.FinishTerm(Lucene.Net.Codecs.BlockTermState) | Improve this Doc View Source Init(IndexOutput) Declaration public override void Init(IndexOutput termsOut) Parameters Type Name Description Lucene.Net.Store.IndexOutput termsOut Overrides Lucene.Net.Codecs.PostingsWriterBase.Init(Lucene.Net.Store.IndexOutput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description Lucene.Net.Codecs.BlockTermState Overrides Lucene.Net.Codecs.PostingsWriterBase.NewTermState() | Improve this Doc View Source SetField(FieldInfo) Declaration public override int SetField(FieldInfo fieldInfo) Parameters Type Name Description Lucene.Net.Index.FieldInfo fieldInfo Returns Type Description System.Int32 Overrides Lucene.Net.Codecs.PostingsWriterBase.SetField(Lucene.Net.Index.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 Lucene.Net.Codecs.PostingsWriterBase.StartTerm() Implements System.IDisposable"
  },
  "Lucene.Net.Codecs.SimpleText.html": {
    "href": "Lucene.Net.Codecs.SimpleText.html",
    "title": "Namespace Lucene.Net.Codecs.SimpleText | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.SimpleText <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Simpletext Codec: writes human readable postings. Classes SimpleTextCodec Plain text index format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextDocValuesFormat Plain text doc values format. FOR RECREATIONAL USE ONLY The .dat file contains the data. For numbers this is a \"fixed-width\" file, for example a single byte range: field myField type NUMERIC minvalue 0 pattern 000 005 T 234 T 123 T ... So a document's value (delta encoded from minvalue) can be retrieved by seeking to startOffset + (1+pattern.length()+2)*docid. The extra 1 is the newline. The extra 2 is another newline and 'T' or 'F': true if the value is real, false if missing. for bytes this is also a \"fixed-width\" file, for example: field myField type BINARY maxlength 6 pattern 0 length 6 foobar[space][space] T length 3 baz[space][space][space][space][space] T ... So a doc's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength+2)*doc the extra 9 is 2 newlines, plus \"length \" itself. The extra 2 is another newline and 'T' or 'F': true if the value is real, false if missing. For sorted bytes this is a fixed-width file, for example: field myField type SORTED numvalues 10 maxLength 8 pattern 0 ordpattern 00 length 6 foobar[space][space] length 3 baz[space][space][space][space][space] ... 03 06 01 10 ... So the \"ord section\" begins at startOffset + (9+pattern.length+maxlength) numValues. A document's ord can be retrieved by seeking to \"ord section\" + (1+ordpattern.length()) docid an ord's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength)*ord For sorted set this is a fixed-width file very similar to the SORTED case, for example: field myField type SORTED_SET numvalues 10 maxLength 8 pattern 0 ordpattern XXXXX length 6 foobar[space][space] length 3 baz[space][space][space][space][space] ... 0,3,5 1,2 10 ... So the \"ord section\" begins at startOffset + (9+pattern.length+maxlength) numValues. A document's ord list can be retrieved by seeking to \"ord section\" + (1+ordpattern.length()) docid this is a comma-separated list, and its padded with spaces to be fixed width. so trim() and split() it. and beware the empty string! An ord's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength)*ord The reader can just scan this file when it opens, skipping over the data blocks and saving the offset/etc for each field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextDocValuesReader SimpleTextDocValuesWriter SimpleTextFieldInfosFormat Plain text field infos format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextFieldInfosReader Reads plain text field infos files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextFieldInfosWriter Writes plain text field infos files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextLiveDocsFormat Reads/writes plain text live docs. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextNormsFormat Plain-text norms format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextNormsFormat.SimpleTextNormsConsumer Writes plain-text norms. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextNormsFormat.SimpleTextNormsProducer Reads plain-text norms. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextPostingsFormat For debugging, curiosity, transparency only!! Do not use this codec in production. This codec stores all postings data in a single human-readable text file (_N.pst). You can view this in any text editor, and even edit it to alter your index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextSegmentInfoFormat Plain text segments file format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextSegmentInfoReader Reads plaintext segments files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextSegmentInfoWriter Writes plain text segments files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextStoredFieldsFormat Plain text stored fields format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextStoredFieldsReader Reads plain text stored fields. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextStoredFieldsWriter Writes plain-text stored fields. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextTermVectorsFormat Plain text term vectors format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextTermVectorsReader Reads plain-text term vectors. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextTermVectorsWriter Writes plain-text term vectors. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextCodec.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextCodec.html",
    "title": "Class SimpleTextCodec | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.Codec SimpleTextCodec Inherited Members Lucene.Net.Codecs.Codec.SetCodecFactory(Lucene.Net.Codecs.ICodecFactory) Lucene.Net.Codecs.Codec.GetCodecFactory() Lucene.Net.Codecs.Codec.Name Codec.ForName(String) Lucene.Net.Codecs.Codec.AvailableCodecs Lucene.Net.Codecs.Codec.Default Lucene.Net.Codecs.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 Lucene.Net.Codecs.DocValuesFormat Overrides Lucene.Net.Codecs.Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description Lucene.Net.Codecs.FieldInfosFormat Overrides Lucene.Net.Codecs.Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description Lucene.Net.Codecs.LiveDocsFormat Overrides Lucene.Net.Codecs.Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description Lucene.Net.Codecs.NormsFormat Overrides Lucene.Net.Codecs.Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description Lucene.Net.Codecs.PostingsFormat Overrides Lucene.Net.Codecs.Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description Lucene.Net.Codecs.SegmentInfoFormat Overrides Lucene.Net.Codecs.Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description Lucene.Net.Codecs.StoredFieldsFormat Overrides Lucene.Net.Codecs.Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description Lucene.Net.Codecs.TermVectorsFormat Overrides Lucene.Net.Codecs.Codec.TermVectorsFormat"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesFormat.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesFormat.html",
    "title": "Class SimpleTextDocValuesFormat | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class SimpleTextDocValuesFormat Plain text doc values format. FOR RECREATIONAL USE ONLY The .dat file contains the data. For numbers this is a \"fixed-width\" file, for example a single byte range: field myField type NUMERIC minvalue 0 pattern 000 005 T 234 T 123 T ... So a document's value (delta encoded from minvalue) can be retrieved by seeking to startOffset + (1+pattern.length()+2)*docid. The extra 1 is the newline. The extra 2 is another newline and 'T' or 'F': true if the value is real, false if missing. for bytes this is also a \"fixed-width\" file, for example: field myField type BINARY maxlength 6 pattern 0 length 6 foobar[space][space] T length 3 baz[space][space][space][space][space] T ... So a doc's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength+2)*doc the extra 9 is 2 newlines, plus \"length \" itself. The extra 2 is another newline and 'T' or 'F': true if the value is real, false if missing. For sorted bytes this is a fixed-width file, for example: field myField type SORTED numvalues 10 maxLength 8 pattern 0 ordpattern 00 length 6 foobar[space][space] length 3 baz[space][space][space][space][space] ... 03 06 01 10 ... So the \"ord section\" begins at startOffset + (9+pattern.length+maxlength) numValues. A document's ord can be retrieved by seeking to \"ord section\" + (1+ordpattern.length()) docid an ord's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength)*ord For sorted set this is a fixed-width file very similar to the SORTED case, for example: field myField type SORTED_SET numvalues 10 maxLength 8 pattern 0 ordpattern XXXXX length 6 foobar[space][space] length 3 baz[space][space][space][space][space] ... 0,3,5 1,2 10 ... So the \"ord section\" begins at startOffset + (9+pattern.length+maxlength) numValues. A document's ord list can be retrieved by seeking to \"ord section\" + (1+ordpattern.length()) docid this is a comma-separated list, and its padded with spaces to be fixed width. so trim() and split() it. and beware the empty string! An ord's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength)*ord The reader can just scan this file when it opens, skipping over the data blocks and saving the offset/etc for each field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lucene.Net.Codecs.DocValuesFormat SimpleTextDocValuesFormat Inherited Members Lucene.Net.Codecs.DocValuesFormat.SetDocValuesFormatFactory(Lucene.Net.Codecs.IDocValuesFormatFactory) Lucene.Net.Codecs.DocValuesFormat.GetDocValuesFormatFactory() Lucene.Net.Codecs.DocValuesFormat.Name Lucene.Net.Codecs.DocValuesFormat.ToString() DocValuesFormat.ForName(String) Lucene.Net.Codecs.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 Lucene.Net.Index.SegmentWriteState state Returns Type Description Lucene.Net.Codecs.DocValuesConsumer Overrides Lucene.Net.Codecs.DocValuesFormat.FieldsConsumer(Lucene.Net.Index.SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description Lucene.Net.Index.SegmentReadState state Returns Type Description Lucene.Net.Codecs.DocValuesProducer Overrides Lucene.Net.Codecs.DocValuesFormat.FieldsProducer(Lucene.Net.Index.SegmentReadState)"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesReader.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesReader.html",
    "title": "Class SimpleTextDocValuesReader | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class SimpleTextDocValuesReader Inheritance System.Object Lucene.Net.Codecs.DocValuesProducer SimpleTextDocValuesReader SimpleTextNormsFormat.SimpleTextNormsProducer Implements System.IDisposable Inherited Members Lucene.Net.Codecs.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 Lucene.Net.Codecs.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 Lucene.Net.Index.FieldInfo fieldInfo Returns Type Description Lucene.Net.Index.BinaryDocValues Overrides Lucene.Net.Codecs.DocValuesProducer.GetBinary(Lucene.Net.Index.FieldInfo) | Improve this Doc View Source GetDocsWithField(FieldInfo) Declaration public override IBits GetDocsWithField(FieldInfo field) Parameters Type Name Description Lucene.Net.Index.FieldInfo field Returns Type Description Lucene.Net.Util.IBits Overrides Lucene.Net.Codecs.DocValuesProducer.GetDocsWithField(Lucene.Net.Index.FieldInfo) | Improve this Doc View Source GetNumeric(FieldInfo) Declaration public override NumericDocValues GetNumeric(FieldInfo fieldInfo) Parameters Type Name Description Lucene.Net.Index.FieldInfo fieldInfo Returns Type Description Lucene.Net.Index.NumericDocValues Overrides Lucene.Net.Codecs.DocValuesProducer.GetNumeric(Lucene.Net.Index.FieldInfo) | Improve this Doc View Source GetSorted(FieldInfo) Declaration public override SortedDocValues GetSorted(FieldInfo fieldInfo) Parameters Type Name Description Lucene.Net.Index.FieldInfo fieldInfo Returns Type Description Lucene.Net.Index.SortedDocValues Overrides Lucene.Net.Codecs.DocValuesProducer.GetSorted(Lucene.Net.Index.FieldInfo) | Improve this Doc View Source GetSortedSet(FieldInfo) Declaration public override SortedSetDocValues GetSortedSet(FieldInfo fieldInfo) Parameters Type Name Description Lucene.Net.Index.FieldInfo fieldInfo Returns Type Description Lucene.Net.Index.SortedSetDocValues Overrides Lucene.Net.Codecs.DocValuesProducer.GetSortedSet(Lucene.Net.Index.FieldInfo) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides Lucene.Net.Codecs.DocValuesProducer.RamBytesUsed() Implements System.IDisposable"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesWriter.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesWriter.html",
    "title": "Class SimpleTextDocValuesWriter | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class SimpleTextDocValuesWriter Inheritance System.Object Lucene.Net.Codecs.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>) Lucene.Net.Codecs.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 Lucene.Net.Index.FieldInfo field System.Collections.Generic.IEnumerable < Lucene.Net.Util.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 Lucene.Net.Index.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 Lucene.Net.Index.FieldInfo field System.Collections.Generic.IEnumerable < Lucene.Net.Util.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 Lucene.Net.Index.FieldInfo field System.Collections.Generic.IEnumerable < Lucene.Net.Util.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"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosFormat.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosFormat.html",
    "title": "Class SimpleTextFieldInfosFormat | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.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 Lucene.Net.Codecs.FieldInfosReader Overrides Lucene.Net.Codecs.FieldInfosFormat.FieldInfosReader | Improve this Doc View Source FieldInfosWriter Declaration public override FieldInfosWriter FieldInfosWriter { get; } Property Value Type Description Lucene.Net.Codecs.FieldInfosWriter Overrides Lucene.Net.Codecs.FieldInfosFormat.FieldInfosWriter"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosReader.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosReader.html",
    "title": "Class SimpleTextFieldInfosReader | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.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 Lucene.Net.Index.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 Lucene.Net.Store.Directory directory System.String segmentName System.String segmentSuffix Lucene.Net.Store.IOContext iocontext Returns Type Description Lucene.Net.Index.FieldInfos Overrides FieldInfosReader.Read(Directory, String, String, IOContext)"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosWriter.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosWriter.html",
    "title": "Class SimpleTextFieldInfosWriter | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.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 Lucene.Net.Store.Directory directory System.String segmentName System.String segmentSuffix Lucene.Net.Index.FieldInfos infos Lucene.Net.Store.IOContext context Overrides FieldInfosWriter.Write(Directory, String, String, FieldInfos, IOContext)"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextLiveDocsFormat.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextLiveDocsFormat.html",
    "title": "Class SimpleTextLiveDocsFormat | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.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 Lucene.Net.Index.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 Lucene.Net.Util.IBits existing Returns Type Description Lucene.Net.Util.IMutableBits Overrides Lucene.Net.Codecs.LiveDocsFormat.NewLiveDocs(Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Store.Directory dir Lucene.Net.Index.SegmentCommitInfo info Lucene.Net.Store.IOContext context Returns Type Description Lucene.Net.Util.IBits Overrides Lucene.Net.Codecs.LiveDocsFormat.ReadLiveDocs(Lucene.Net.Store.Directory, Lucene.Net.Index.SegmentCommitInfo, Lucene.Net.Store.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 Lucene.Net.Util.IMutableBits bits Lucene.Net.Store.Directory dir Lucene.Net.Index.SegmentCommitInfo info System.Int32 newDelCount Lucene.Net.Store.IOContext context Overrides LiveDocsFormat.WriteLiveDocs(IMutableBits, Directory, SegmentCommitInfo, Int32, IOContext)"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.html",
    "title": "Class SimpleTextNormsFormat | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.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 Lucene.Net.Index.SegmentWriteState state Returns Type Description Lucene.Net.Codecs.DocValuesConsumer Overrides Lucene.Net.Codecs.NormsFormat.NormsConsumer(Lucene.Net.Index.SegmentWriteState) | Improve this Doc View Source NormsProducer(SegmentReadState) Declaration public override DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description Lucene.Net.Index.SegmentReadState state Returns Type Description Lucene.Net.Codecs.DocValuesProducer Overrides Lucene.Net.Codecs.NormsFormat.NormsProducer(Lucene.Net.Index.SegmentReadState)"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.SimpleTextNormsConsumer.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.SimpleTextNormsConsumer.html",
    "title": "Class SimpleTextNormsFormat.SimpleTextNormsConsumer | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.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>) Lucene.Net.Codecs.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 Lucene.Net.Index.SegmentWriteState state Implements System.IDisposable"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.SimpleTextNormsProducer.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.SimpleTextNormsProducer.html",
    "title": "Class SimpleTextNormsFormat.SimpleTextNormsProducer | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.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() Lucene.Net.Codecs.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 Lucene.Net.Index.SegmentReadState state Implements System.IDisposable"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextPostingsFormat.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextPostingsFormat.html",
    "title": "Class SimpleTextPostingsFormat | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class SimpleTextPostingsFormat For debugging, curiosity, transparency only!! Do not use this codec in production. This codec stores all postings data in a single human-readable text file (_N.pst). You can view this in any text editor, and even edit it to alter your index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lucene.Net.Codecs.PostingsFormat SimpleTextPostingsFormat Inherited Members Lucene.Net.Codecs.PostingsFormat.EMPTY Lucene.Net.Codecs.PostingsFormat.SetPostingsFormatFactory(Lucene.Net.Codecs.IPostingsFormatFactory) Lucene.Net.Codecs.PostingsFormat.GetPostingsFormatFactory() Lucene.Net.Codecs.PostingsFormat.Name Lucene.Net.Codecs.PostingsFormat.ToString() PostingsFormat.ForName(String) Lucene.Net.Codecs.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 Lucene.Net.Index.SegmentWriteState state Returns Type Description Lucene.Net.Codecs.FieldsConsumer Overrides Lucene.Net.Codecs.PostingsFormat.FieldsConsumer(Lucene.Net.Index.SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description Lucene.Net.Index.SegmentReadState state Returns Type Description Lucene.Net.Codecs.FieldsProducer Overrides Lucene.Net.Codecs.PostingsFormat.FieldsProducer(Lucene.Net.Index.SegmentReadState)"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoFormat.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoFormat.html",
    "title": "Class SimpleTextSegmentInfoFormat | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.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 Lucene.Net.Codecs.SegmentInfoReader Overrides Lucene.Net.Codecs.SegmentInfoFormat.SegmentInfoReader | Improve this Doc View Source SegmentInfoWriter Declaration public override SegmentInfoWriter SegmentInfoWriter { get; } Property Value Type Description Lucene.Net.Codecs.SegmentInfoWriter Overrides Lucene.Net.Codecs.SegmentInfoFormat.SegmentInfoWriter"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoReader.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoReader.html",
    "title": "Class SimpleTextSegmentInfoReader | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.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 Lucene.Net.Store.Directory directory System.String segmentName Lucene.Net.Store.IOContext context Returns Type Description Lucene.Net.Index.SegmentInfo Overrides SegmentInfoReader.Read(Directory, String, IOContext)"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoWriter.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoWriter.html",
    "title": "Class SimpleTextSegmentInfoWriter | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.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 Lucene.Net.Store.Directory dir Lucene.Net.Index.SegmentInfo si Lucene.Net.Index.FieldInfos fis Lucene.Net.Store.IOContext ioContext Overrides Lucene.Net.Codecs.SegmentInfoWriter.Write(Lucene.Net.Store.Directory, Lucene.Net.Index.SegmentInfo, Lucene.Net.Index.FieldInfos, Lucene.Net.Store.IOContext)"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsFormat.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsFormat.html",
    "title": "Class SimpleTextStoredFieldsFormat | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.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 Lucene.Net.Store.Directory directory Lucene.Net.Index.SegmentInfo si Lucene.Net.Index.FieldInfos fn Lucene.Net.Store.IOContext context Returns Type Description Lucene.Net.Codecs.StoredFieldsReader Overrides Lucene.Net.Codecs.StoredFieldsFormat.FieldsReader(Lucene.Net.Store.Directory, Lucene.Net.Index.SegmentInfo, Lucene.Net.Index.FieldInfos, Lucene.Net.Store.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 Lucene.Net.Store.Directory directory Lucene.Net.Index.SegmentInfo si Lucene.Net.Store.IOContext context Returns Type Description Lucene.Net.Codecs.StoredFieldsWriter Overrides Lucene.Net.Codecs.StoredFieldsFormat.FieldsWriter(Lucene.Net.Store.Directory, Lucene.Net.Index.SegmentInfo, Lucene.Net.Store.IOContext)"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsReader.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsReader.html",
    "title": "Class SimpleTextStoredFieldsReader | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.StoredFieldsReader SimpleTextStoredFieldsReader Implements System.IDisposable Inherited Members Lucene.Net.Codecs.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 Lucene.Net.Store.Directory directory Lucene.Net.Index.SegmentInfo si Lucene.Net.Index.FieldInfos fn Lucene.Net.Store.IOContext context Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides Lucene.Net.Codecs.StoredFieldsReader.CheckIntegrity() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Lucene.Net.Codecs.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 Lucene.Net.Codecs.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 Lucene.Net.Index.StoredFieldVisitor visitor Overrides StoredFieldsReader.VisitDocument(Int32, StoredFieldVisitor) Implements System.IDisposable"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsWriter.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsWriter.html",
    "title": "Class SimpleTextStoredFieldsWriter | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.StoredFieldsWriter SimpleTextStoredFieldsWriter Implements System.IDisposable Inherited Members Lucene.Net.Codecs.StoredFieldsWriter.FinishDocument() Lucene.Net.Codecs.StoredFieldsWriter.Merge(Lucene.Net.Index.MergeState) StoredFieldsWriter.AddDocument<T1>(IEnumerable<T1>, FieldInfos) Lucene.Net.Codecs.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 Lucene.Net.Store.Directory directory System.String segment Lucene.Net.Store.IOContext context Methods | Improve this Doc View Source Abort() Declaration public override void Abort() Overrides Lucene.Net.Codecs.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 Lucene.Net.Index.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 Lucene.Net.Index.FieldInfo info Lucene.Net.Index.IIndexableField field Overrides Lucene.Net.Codecs.StoredFieldsWriter.WriteField(Lucene.Net.Index.FieldInfo, Lucene.Net.Index.IIndexableField) Implements System.IDisposable"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsFormat.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsFormat.html",
    "title": "Class SimpleTextTermVectorsFormat | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.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 Lucene.Net.Store.Directory directory Lucene.Net.Index.SegmentInfo segmentInfo Lucene.Net.Index.FieldInfos fieldInfos Lucene.Net.Store.IOContext context Returns Type Description Lucene.Net.Codecs.TermVectorsReader Overrides Lucene.Net.Codecs.TermVectorsFormat.VectorsReader(Lucene.Net.Store.Directory, Lucene.Net.Index.SegmentInfo, Lucene.Net.Index.FieldInfos, Lucene.Net.Store.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 Lucene.Net.Store.Directory directory Lucene.Net.Index.SegmentInfo segmentInfo Lucene.Net.Store.IOContext context Returns Type Description Lucene.Net.Codecs.TermVectorsWriter Overrides Lucene.Net.Codecs.TermVectorsFormat.VectorsWriter(Lucene.Net.Store.Directory, Lucene.Net.Index.SegmentInfo, Lucene.Net.Store.IOContext)"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsReader.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsReader.html",
    "title": "Class SimpleTextTermVectorsReader | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.TermVectorsReader SimpleTextTermVectorsReader Implements System.IDisposable Inherited Members Lucene.Net.Codecs.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 Lucene.Net.Store.Directory directory Lucene.Net.Index.SegmentInfo si Lucene.Net.Store.IOContext context Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides Lucene.Net.Codecs.TermVectorsReader.CheckIntegrity() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Lucene.Net.Codecs.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 Lucene.Net.Index.Fields Overrides TermVectorsReader.Get(Int32) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides Lucene.Net.Codecs.TermVectorsReader.RamBytesUsed() Implements System.IDisposable"
  },
  "Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsWriter.html": {
    "href": "Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsWriter.html",
    "title": "Class SimpleTextTermVectorsWriter | Apache Lucene.NET 4.8.0-beta00013 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 Lucene.Net.Codecs.TermVectorsWriter SimpleTextTermVectorsWriter Implements System.IDisposable Inherited Members Lucene.Net.Codecs.TermVectorsWriter.FinishDocument() Lucene.Net.Codecs.TermVectorsWriter.FinishField() Lucene.Net.Codecs.TermVectorsWriter.FinishTerm() TermVectorsWriter.AddProx(Int32, DataInput, DataInput) Lucene.Net.Codecs.TermVectorsWriter.Merge(Lucene.Net.Index.MergeState) Lucene.Net.Codecs.TermVectorsWriter.AddAllDocVectors(Lucene.Net.Index.Fields, Lucene.Net.Index.MergeState) Lucene.Net.Codecs.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 Lucene.Net.Store.Directory directory System.String segment Lucene.Net.Store.IOContext context Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < Lucene.Net.Util.BytesRef > Overrides Lucene.Net.Codecs.TermVectorsWriter.Comparer Methods | Improve this Doc View Source Abort() Declaration public override sealed void Abort() Overrides Lucene.Net.Codecs.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 Lucene.Net.Util.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 Lucene.Net.Index.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 Lucene.Net.Index.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 Lucene.Net.Util.BytesRef term System.Int32 freq Overrides TermVectorsWriter.StartTerm(BytesRef, Int32) Implements System.IDisposable"
  },
  "overview.html": {
    "href": "overview.html",
    "title": "| Apache Lucene.NET 4.8.0-beta00013 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. --> Collection of useful codec, postings format and terms dictionary implementations."
  }
}