Class Field
- java.lang.Object
-
- org.apache.lucene.document.Field
-
- All Implemented Interfaces:
IndexableField
- Direct Known Subclasses:
BinaryDocValuesField
,BinaryPoint
,DoubleField
,DoublePoint
,DoubleRange
,FeatureField
,FloatField
,FloatPoint
,FloatRange
,InetAddressPoint
,InetAddressRange
,IntField
,IntPoint
,IntRange
,KeywordField
,KnnByteVectorField
,KnnFloatVectorField
,LatLonDocValuesField
,LatLonPoint
,LongField
,LongPoint
,LongRange
,NumericDocValuesField
,ShapeDocValuesField
,ShapeField.Triangle
,SortedDocValuesField
,SortedNumericDocValuesField
,SortedSetDocValuesField
,StoredField
,StringField
,TextField
,XYDocValuesField
,XYPointField
public class Field extends Object implements IndexableField
Expert: directly create a field for a document. Most users should use one of the sugar subclasses:TextField
:Reader
orString
indexed for full-text searchStringField
:String
indexed verbatim as a single tokenIntField
:int
indexed for exact/range queries.LongField
:long
indexed for exact/range queries.FloatField
:float
indexed for exact/range queries.DoubleField
:double
indexed for exact/range queries.SortedDocValuesField
:byte[]
indexed column-wise for sorting/facetingSortedSetDocValuesField
:SortedSet<byte[]>
indexed column-wise for sorting/facetingNumericDocValuesField
:long
indexed column-wise for sorting/facetingSortedNumericDocValuesField
:SortedSet<long>
indexed column-wise for sorting/facetingStoredField
: Stored-only value for retrieving in summary results
A field is a section of a Document. Each field has three parts: name, type and value. Values may be text (String, Reader or pre-analyzed TokenStream), binary (byte[]), or numeric (a Number). Fields are optionally stored in the index, so that they may be returned with hits on the document.
NOTE: the field type is an
IndexableFieldType
. Making changes to the state of the IndexableFieldType will impact any Field it is used in. It is strongly recommended that no changes be made after Field instantiation.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
Field.Store
Specifies whether and how a field should be stored.
-
Field Summary
Fields Modifier and Type Field Description protected Object
fieldsData
Field's valueprotected String
name
Field's nameprotected TokenStream
tokenStream
Pre-analyzed tokenStream for indexed fields; this is separate from fieldsData because you are allowed to have both; eg maybe field has a String value but you customize how it's tokenizedprotected IndexableFieldType
type
Field's type
-
Constructor Summary
Constructors Modifier Constructor Description Field(String name, byte[] value, int offset, int length, IndexableFieldType type)
Create field with binary value.Field(String name, byte[] value, IndexableFieldType type)
Create field with binary value.Field(String name, Reader reader, IndexableFieldType type)
Create field with Reader value.Field(String name, CharSequence value, IndexableFieldType type)
Create field with String value.Field(String name, TokenStream tokenStream, IndexableFieldType type)
Create field with TokenStream value.protected
Field(String name, IndexableFieldType type)
Expert: creates a field with no initial value.Field(String name, BytesRef bytes, IndexableFieldType type)
Create field with binary value.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description BytesRef
binaryValue()
Non-null if this field has a binary valueIndexableFieldType
fieldType()
Returns theFieldType
for this field.CharSequence
getCharSequenceValue()
Non-null if this field has a string valueInvertableType
invertableType()
Describes how this field should be inverted.String
name()
Field nameNumber
numericValue()
Non-null if this field has a numeric valueReader
readerValue()
The value of the field as a Reader, or null.void
setBytesValue(byte[] value)
Expert: change the value of this field.void
setBytesValue(BytesRef value)
Expert: change the value of this field.void
setByteValue(byte value)
Expert: change the value of this field.void
setDoubleValue(double value)
Expert: change the value of this field.void
setFloatValue(float value)
Expert: change the value of this field.void
setIntValue(int value)
Expert: change the value of this field.void
setLongValue(long value)
Expert: change the value of this field.void
setReaderValue(Reader value)
Expert: change the value of this field.void
setShortValue(short value)
Expert: change the value of this field.void
setStringValue(String value)
Expert: change the value of this field.void
setTokenStream(TokenStream tokenStream)
Expert: sets the token stream to be used for indexing and causes isIndexed() and isTokenized() to return true.StoredValue
storedValue()
Stored value.String
stringValue()
The value of the field as a String, or null.TokenStream
tokenStream(Analyzer analyzer, TokenStream reuse)
Creates the TokenStream used for indexing this field.TokenStream
tokenStreamValue()
The TokenStream for this field to be used when indexing, or null.String
toString()
Prints a Field for human consumption.
-
-
-
Field Detail
-
type
protected final IndexableFieldType type
Field's type
-
name
protected final String name
Field's name
-
fieldsData
protected Object fieldsData
Field's value
-
tokenStream
protected TokenStream tokenStream
Pre-analyzed tokenStream for indexed fields; this is separate from fieldsData because you are allowed to have both; eg maybe field has a String value but you customize how it's tokenized
-
-
Constructor Detail
-
Field
protected Field(String name, IndexableFieldType type)
Expert: creates a field with no initial value. Intended only for custom Field subclasses.- Parameters:
name
- field nametype
- field type- Throws:
IllegalArgumentException
- if either the name or type is null.
-
Field
public Field(String name, Reader reader, IndexableFieldType type)
Create field with Reader value.- Parameters:
name
- field namereader
- reader valuetype
- field type- Throws:
IllegalArgumentException
- if either the name or type is null, or if the field's type is stored(), or if tokenized() is false.NullPointerException
- if the reader is null
-
Field
public Field(String name, TokenStream tokenStream, IndexableFieldType type)
Create field with TokenStream value.- Parameters:
name
- field nametokenStream
- TokenStream valuetype
- field type- Throws:
IllegalArgumentException
- if either the name or type is null, or if the field's type is stored(), or if tokenized() is false, or if indexed() is false.NullPointerException
- if the tokenStream is null
-
Field
public Field(String name, byte[] value, IndexableFieldType type)
Create field with binary value.NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field.
- Parameters:
name
- field namevalue
- byte array pointing to binary content (not copied)type
- field type- Throws:
IllegalArgumentException
- if the field name, value or type is null, or the field's type is indexed().
-
Field
public Field(String name, byte[] value, int offset, int length, IndexableFieldType type)
Create field with binary value.NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field.
- Parameters:
name
- field namevalue
- byte array pointing to binary content (not copied)offset
- starting position of the byte arraylength
- valid length of the byte arraytype
- field type- Throws:
IllegalArgumentException
- if the field name, value or type is null, or the field's type is indexed().
-
Field
public Field(String name, BytesRef bytes, IndexableFieldType type)
Create field with binary value.NOTE: the provided BytesRef is not copied so be sure not to change it until you're done with this field.
- Parameters:
name
- field namebytes
- BytesRef pointing to binary content (not copied)type
- field type- Throws:
IllegalArgumentException
- if the field name, bytes or type is null, or the field's type is indexed().
-
Field
public Field(String name, CharSequence value, IndexableFieldType type)
Create field with String value.- Parameters:
name
- field namevalue
- string valuetype
- field type- Throws:
IllegalArgumentException
- if either the name, value or type is null, or if the field's type is neither indexed() nor stored(), or if indexed() is false but storeTermVectors() is true.
-
-
Method Detail
-
stringValue
public String stringValue()
The value of the field as a String, or null. If null, the Reader value or binary value is used. Exactly one of stringValue(), readerValue(), and binaryValue() must be set.- Specified by:
stringValue
in interfaceIndexableField
-
getCharSequenceValue
public CharSequence getCharSequenceValue()
Description copied from interface:IndexableField
Non-null if this field has a string value- Specified by:
getCharSequenceValue
in interfaceIndexableField
-
readerValue
public Reader readerValue()
The value of the field as a Reader, or null. If null, the String value or binary value is used. Exactly one of stringValue(), readerValue(), and binaryValue() must be set.- Specified by:
readerValue
in interfaceIndexableField
-
tokenStreamValue
public TokenStream tokenStreamValue()
The TokenStream for this field to be used when indexing, or null. If null, the Reader value or String value is analyzed to produce the indexed tokens.
-
setStringValue
public void setStringValue(String value)
Expert: change the value of this field. This can be used during indexing to re-use a single Field instance to improve indexing speed by avoiding GC cost of new'ing and reclaiming Field instances. Typically a singleDocument
instance is re-used as well. This helps most on small documents.Each Field instance should only be used once within a single
Document
instance. See ImproveIndexingSpeed for details.
-
setReaderValue
public void setReaderValue(Reader value)
Expert: change the value of this field. SeesetStringValue(String)
.
-
setBytesValue
public void setBytesValue(byte[] value)
Expert: change the value of this field. SeesetStringValue(String)
.
-
setBytesValue
public void setBytesValue(BytesRef value)
Expert: change the value of this field. SeesetStringValue(String)
.NOTE: the provided BytesRef is not copied so be sure not to change it until you're done with this field.
-
setByteValue
public void setByteValue(byte value)
Expert: change the value of this field. SeesetStringValue(String)
.
-
setShortValue
public void setShortValue(short value)
Expert: change the value of this field. SeesetStringValue(String)
.
-
setIntValue
public void setIntValue(int value)
Expert: change the value of this field. SeesetStringValue(String)
.
-
setLongValue
public void setLongValue(long value)
Expert: change the value of this field. SeesetStringValue(String)
.
-
setFloatValue
public void setFloatValue(float value)
Expert: change the value of this field. SeesetStringValue(String)
.
-
setDoubleValue
public void setDoubleValue(double value)
Expert: change the value of this field. SeesetStringValue(String)
.
-
setTokenStream
public void setTokenStream(TokenStream tokenStream)
Expert: sets the token stream to be used for indexing and causes isIndexed() and isTokenized() to return true. May be combined with stored values from stringValue() or binaryValue()
-
name
public String name()
Description copied from interface:IndexableField
Field name- Specified by:
name
in interfaceIndexableField
-
numericValue
public Number numericValue()
Description copied from interface:IndexableField
Non-null if this field has a numeric value- Specified by:
numericValue
in interfaceIndexableField
-
binaryValue
public BytesRef binaryValue()
Description copied from interface:IndexableField
Non-null if this field has a binary value- Specified by:
binaryValue
in interfaceIndexableField
-
toString
public String toString()
Prints a Field for human consumption.
-
fieldType
public IndexableFieldType fieldType()
Returns theFieldType
for this field.- Specified by:
fieldType
in interfaceIndexableField
-
invertableType
public InvertableType invertableType()
Description copied from interface:IndexableField
Describes how this field should be inverted. This must return a non-null value if the field indexes terms and postings.- Specified by:
invertableType
in interfaceIndexableField
-
tokenStream
public TokenStream tokenStream(Analyzer analyzer, TokenStream reuse)
Description copied from interface:IndexableField
Creates the TokenStream used for indexing this field. If appropriate, implementations should use the given Analyzer to create the TokenStreams.- Specified by:
tokenStream
in interfaceIndexableField
- Parameters:
analyzer
- Analyzer that should be used to create the TokenStreams fromreuse
- TokenStream for a previous instance of this field name. This allows custom field types (like StringField and NumericField) that do not use the analyzer to still have good performance. Note: the passed-in type may be inappropriate, for example if you mix up different types of Fields for the same field name. So it's the responsibility of the implementation to check.- Returns:
- TokenStream value for indexing the document. Should always return a non-null value if the field is to be indexed
-
storedValue
public StoredValue storedValue()
Description copied from interface:IndexableField
Stored value. This method is called to populate stored fields and must return a non-null value if the field stored.- Specified by:
storedValue
in interfaceIndexableField
-
-