## org.apache.lucene.document
Class DoubleField

    java.lang.Object
      org.apache.lucene.document.Field
          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.