Class LongField
- java.lang.Object
-
- org.apache.lucene.document.Field
-
- org.apache.lucene.document.LongField
-
- All Implemented Interfaces:
IndexableField
public final class LongField extends Field
Field that indexes
longvalues for efficient range filtering and sorting. Here's an example usage:document.add(new LongField(name, 6L, Field.Store.NO));
For optimal performance, re-use theLongFieldandDocumentinstance for more than one document:LongField field = new LongField(name, 0L, Field.Store.NO); Document document = new Document(); document.add(field); for(all documents) { ... field.setLongValue(value) writer.addDocument(document); ... }See alsoIntField,FloatField,DoubleField. Any type that can be converted to long can also be indexed. For example, date/time values represented by aDatecan be translated into a long value using theDate.getTime()method. If you don't need millisecond precision, you can quantize the value, either by dividing the result ofDate.getTime()or using the separate getters (for year, month, etc.) to construct anintorlongvalue.To perform range querying or filtering against a
LongField, useNumericRangeQueryorNumericRangeFilter. To sort according to aLongField, use the normal numeric sort types, egSortField.Type.LONG.LongFieldvalues can also be loaded directly fromFieldCache.You may add the same field name as an
LongFieldto the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valuedLongField.A
LongFieldwill consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise.Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the
precisionStep, measured in bits. SmallerprecisionStepvalues result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a customFieldTypeand invoke theFieldType.setNumericPrecisionStep(int)method if you'd like to change the value. Note that you must also specify a congruent value when creatingNumericRangeQueryorNumericRangeFilter. For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to useInteger.MAX_VALUE, which produces one term per value.For more information on the internals of numeric trie indexing, including the
precisionStepconfiguration, seeNumericRangeQuery. The format of indexed values is described inNumericUtils.If you only need to sort by numeric value, and never run range querying/filtering, you can index using a
precisionStepofInteger.MAX_VALUE. This will minimize disk space consumed.More advanced users can instead use
NumericTokenStreamdirectly, when indexing numbers. This class is a wrapper around this token stream type for easier, more intuitive usage.- Since:
- 2.9
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.lucene.document.Field
Field.Index, Field.Store, Field.TermVector
-
-
Field Summary
Fields Modifier and Type Field Description static FieldTypeTYPE_NOT_STOREDType for a LongField that is not stored: normalization factors, frequencies, and positions are omitted.static FieldTypeTYPE_STOREDType for a stored LongField: normalization factors, frequencies, and positions are omitted.
-
Constructor Summary
Constructors Constructor Description LongField(java.lang.String name, long value, Field.Store stored)Creates a stored or un-stored LongField with the provided value and defaultprecisionStepNumericUtils.PRECISION_STEP_DEFAULT(4).LongField(java.lang.String name, long value, FieldType type)Expert: allows you to customize theFieldType.
-
Method Summary
-
Methods inherited from class org.apache.lucene.document.Field
binaryValue, boost, fieldType, name, numericValue, readerValue, setBoost, setBytesValue, setBytesValue, setByteValue, setDoubleValue, setFloatValue, setIntValue, setLongValue, setReaderValue, setShortValue, setStringValue, setTokenStream, stringValue, tokenStream, tokenStreamValue, toString, translateFieldType
-
-
-
-
Field Detail
-
TYPE_NOT_STORED
public static final FieldType TYPE_NOT_STORED
Type for a LongField that is not stored: normalization factors, frequencies, and positions are omitted.
-
TYPE_STORED
public static final FieldType TYPE_STORED
Type for a stored LongField: normalization factors, frequencies, and positions are omitted.
-
-
Constructor Detail
-
LongField
public LongField(java.lang.String name, long value, Field.Store stored)Creates a stored or un-stored LongField with the provided value and defaultprecisionStepNumericUtils.PRECISION_STEP_DEFAULT(4).- Parameters:
name- field namevalue- 64-bit long valuestored- Store.YES if the content should also be stored- Throws:
java.lang.IllegalArgumentException- if the field name is null.
-
LongField
public LongField(java.lang.String name, long value, FieldType type)Expert: allows you to customize theFieldType.- Parameters:
name- field namevalue- 64-bit long valuetype- customized field type: must haveFieldType.numericType()ofFieldType.NumericType.LONG.- Throws:
java.lang.IllegalArgumentException- if the field name or type is null, or if the field type does not have a LONG numericType()
-
-