org.apache.lucene.document
Class DoubleField

java.lang.Object
  extended by org.apache.lucene.document.Field
      extended by org.apache.lucene.document.DoubleField
All Implemented Interfaces:
IndexableField

public final class DoubleField
extends Field

Field that indexes double values for efficient range filtering and sorting. Here's an example usage:

 document.add(new DoubleField(name, 6.0, Field.Store.NO));
 
For optimal performance, re-use the DoubleField and Document instance for more than one document:
  DoubleField field = new DoubleField(name, 0.0, Field.Store.NO);
  Document document = new Document();
  document.add(field);
 
  for(all documents) {
    ...
    field.setDoubleValue(value)
    writer.addDocument(document);
    ...
  }
 
See also IntField, LongField, FloatField.

To perform range querying or filtering against a DoubleField, use NumericRangeQuery or NumericRangeFilter. To sort according to a DoubleField, use the normal numeric sort types, eg SortField.Type.DOUBLE. DoubleField values can also be loaded directly from FieldCache.

You may add the same field name as an DoubleField to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued DoubleField.

A DoubleField will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise.

Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep, measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the FieldType.setNumericPrecisionStep(int) method if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery or NumericRangeFilter. For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use Integer.MAX_VALUE, which produces one term per value.

For more information on the internals of numeric trie indexing, including the precisionStep configuration, see NumericRangeQuery. The format of indexed values is described in NumericUtils.

If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of Integer.MAX_VALUE. This will minimize disk space consumed.

More advanced users can instead use NumericTokenStream directly, when indexing numbers. This class is a wrapper around this token stream type for easier, more intuitive usage.

Since:
2.9

Nested Class Summary
 
Nested classes/interfaces inherited from class org.apache.lucene.document.Field
Field.Index, Field.Store, Field.TermVector
 
Field Summary
static FieldType TYPE_NOT_STORED
          Type for a DoubleField that is not stored: normalization factors, frequencies, and positions are omitted.
static FieldType TYPE_STORED
          Type for a stored DoubleField: normalization factors, frequencies, and positions are omitted.
 
Fields inherited from class org.apache.lucene.document.Field
boost, fieldsData, name, tokenStream, type
 
Constructor Summary
DoubleField(String name, double value, Field.Store stored)
          Creates a stored or un-stored DoubleField with the provided value and default precisionStep NumericUtils.PRECISION_STEP_DEFAULT (4).
DoubleField(String name, double value, FieldType type)
          Expert: allows you to customize the FieldType.
 
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
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

TYPE_NOT_STORED

public static final FieldType TYPE_NOT_STORED
Type for a DoubleField that is not stored: normalization factors, frequencies, and positions are omitted.


TYPE_STORED

public static final FieldType TYPE_STORED
Type for a stored DoubleField: normalization factors, frequencies, and positions are omitted.

Constructor Detail

DoubleField

public DoubleField(String name,
                   double value,
                   Field.Store stored)
Creates a stored or un-stored DoubleField with the provided value and default precisionStep NumericUtils.PRECISION_STEP_DEFAULT (4).

Parameters:
name - field name
value - 64-bit double value
stored - Store.YES if the content should also be stored
Throws:
IllegalArgumentException - if the field name is null.

DoubleField

public DoubleField(String name,
                   double value,
                   FieldType type)
Expert: allows you to customize the FieldType.

Parameters:
name - field name
value - 64-bit double value
type - customized field type: must have FieldType.numericType() of FieldType.NumericType.DOUBLE.
Throws:
IllegalArgumentException - if the field name or type is null, or if the field type does not have a DOUBLE numericType()


Copyright © 2000-2013 Apache Software Foundation. All Rights Reserved.