blob: daa47f2fb9eba29e99dda54c563882c110ff3848 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.IO;
using TokenStream = Lucene.Net.Analysis.TokenStream;
using FieldInvertState = Lucene.Net.Index.FieldInvertState;
namespace Lucene.Net.Documents
{
/// <summary> Synonymous with <see cref="Field" />.
///
/// <p/><bold>WARNING</bold>: This interface may change within minor versions, despite Lucene's backward compatibility requirements.
/// This means new methods may be added from version to version. This change only affects the Fieldable API; other backwards
/// compatibility promises remain intact. For example, Lucene can still
/// read and write indices created within the same major version.
/// <p/>
///
///
/// </summary>
public interface IFieldable
{
/// <summary>Gets or sets the boost factor for hits for this field. This value will be
/// multiplied into the score of all hits on this this field of this
/// document.
///
/// <p/>The boost is multiplied by <see cref="Lucene.Net.Documents.Document.Boost" /> of the document
/// containing this field. If a document has multiple fields with the same
/// name, all such values are multiplied together. This product is then
/// used to compute the norm factor for the field. By
/// default, in the <see cref="Lucene.Net.Search.Similarity.ComputeNorm(String,Lucene.Net.Index.FieldInvertState)"/>
/// method, the boost value is multiplied
/// by the <see cref="Lucene.Net.Search.Similarity.LengthNorm(String,int)"/>
/// and then rounded by <see cref="Lucene.Net.Search.Similarity.EncodeNorm(float)" /> before it is stored in the
/// index. One should attempt to ensure that this product does not overflow
/// the range of that encoding.
///
/// <p/>The default value is 1.0.
///
/// <p/>Note: this value is not stored directly with the document in the index.
/// Documents returned from <see cref="Lucene.Net.Index.IndexReader.Document(int)" /> and
/// <see cref="Lucene.Net.Search.Searcher.Doc(int)" /> may thus not have the same value present as when
/// this field was indexed.
///
/// </summary>
/// <seealso cref="Lucene.Net.Documents.Document.Boost">
/// </seealso>
/// <seealso cref="Lucene.Net.Search.Similarity.ComputeNorm(String, FieldInvertState)">
/// </seealso>
/// <seealso cref="Lucene.Net.Search.Similarity.EncodeNorm(float)">
/// </seealso>
float Boost { get; set; }
/// <summary>Returns the name of the field as an interned string.
/// For example "date", "title", "body", ...
/// </summary>
string Name { get; }
/// <summary>The value of the field as a String, or null.
/// <p/>
/// For indexing, if isStored()==true, the stringValue() will be used as the stored field value
/// unless isBinary()==true, in which case GetBinaryValue() will be used.
///
/// If isIndexed()==true and isTokenized()==false, this String value will be indexed as a single token.
/// If isIndexed()==true and isTokenized()==true, then tokenStreamValue() will be used to generate indexed tokens if not null,
/// else readerValue() will be used to generate indexed tokens if not null, else stringValue() will be used to generate tokens.
/// </summary>
string StringValue { get; }
/// <summary>The value of the field as a Reader, which can be used at index time to generate indexed tokens.</summary>
/// <seealso cref="StringValue()">
/// </seealso>
TextReader ReaderValue { get; }
/// <summary>The TokenStream for this field to be used when indexing, or null.</summary>
/// <seealso cref="StringValue()">
/// </seealso>
TokenStream TokenStreamValue { get; }
/// <summary>True if the value of the field is to be stored in the index for return
/// with search hits.
/// </summary>
bool IsStored { get; }
/// <summary>True if the value of the field is to be indexed, so that it may be
/// searched on.
/// </summary>
bool IsIndexed { get; }
/// <summary>True if the value of the field should be tokenized as text prior to
/// indexing. Un-tokenized fields are indexed as a single word and may not be
/// Reader-valued.
/// </summary>
bool IsTokenized { get; }
/// <summary>True if the term or terms used to index this field are stored as a term
/// vector, available from <see cref="Lucene.Net.Index.IndexReader.GetTermFreqVector(int,String)" />.
/// These methods do not provide access to the original content of the field,
/// only to terms used to index it. If the original content must be
/// preserved, use the <c>stored</c> attribute instead.
///
/// </summary>
/// <seealso cref="Lucene.Net.Index.IndexReader.GetTermFreqVector(int, String)">
/// </seealso>
bool IsTermVectorStored { get; }
/// <summary> True if terms are stored as term vector together with their offsets
/// (start and end positon in source text).
/// </summary>
bool IsStoreOffsetWithTermVector { get; }
/// <summary> True if terms are stored as term vector together with their token positions.</summary>
bool IsStorePositionWithTermVector { get; }
/// <summary>True if the value of the field is stored as binary </summary>
bool IsBinary { get; }
/// <summary>
/// True if norms are omitted for this indexed field.
/// <para>
/// Expert:
/// If set, omit normalization factors associated with this indexed field.
/// This effectively disables indexing boosts and length normalization for this field.
/// </para>
/// </summary>
bool OmitNorms { get; set; }
/// <summary> Indicates whether a Field is Lazy or not. The semantics of Lazy loading are such that if a Field is lazily loaded, retrieving
/// it's values via <see cref="StringValue()" /> or <see cref="GetBinaryValue()" /> is only valid as long as the <see cref="Lucene.Net.Index.IndexReader" /> that
/// retrieved the <see cref="Document" /> is still open.
///
/// </summary>
/// <value> true if this field can be loaded lazily </value>
bool IsLazy { get; }
/// <summary> Returns offset into byte[] segment that is used as value, if Field is not binary
/// returned value is undefined
/// </summary>
/// <value> index of the first character in byte[] segment that represents this Field value </value>
int BinaryOffset { get; }
/// <summary> Returns length of byte[] segment that is used as value, if Field is not binary
/// returned value is undefined
/// </summary>
/// <value> length of byte[] segment that represents this Field value </value>
int BinaryLength { get; }
/// <summary> Return the raw byte[] for the binary field. Note that
/// you must also call <see cref="BinaryLength" /> and <see cref="BinaryOffset" />
/// to know which range of bytes in this
/// returned array belong to the field.
/// </summary>
/// <returns> reference to the Field value as byte[]. </returns>
byte[] GetBinaryValue();
/// <summary> Return the raw byte[] for the binary field. Note that
/// you must also call <see cref="BinaryLength" /> and <see cref="BinaryOffset" />
/// to know which range of bytes in this
/// returned array belong to the field.<p/>
/// About reuse: if you pass in the result byte[] and it is
/// used, likely the underlying implementation will hold
/// onto this byte[] and return it in future calls to
/// <see cref="GetBinaryValue()" /> or <see cref="GetBinaryValue()" />.
/// So if you subsequently re-use the same byte[] elsewhere
/// it will alter this Fieldable's value.
/// </summary>
/// <param name="result"> User defined buffer that will be used if
/// possible. If this is null or not large enough, a new
/// buffer is allocated
/// </param>
/// <returns> reference to the Field value as byte[].
/// </returns>
byte[] GetBinaryValue(byte[] result);
/// Expert:
/// <para>
/// If set, omit term freq, positions and payloads from
/// postings for this field.
/// </para>
/// <para>
/// <b>NOTE</b>: While this option reduces storage space
/// required in the index, it also means any query
/// requiring positional information, such as
/// <see cref="Lucene.Net.Search.PhraseQuery"/> or
/// <see cref="Lucene.Net.Search.Spans.SpanQuery"/>
/// subclasses will silently fail to find results.
/// </para>
bool OmitTermFreqAndPositions { set; get; }
}
}