Class LegacyFloatField
- All Implemented Interfaces:
org.apache.lucene.index.IndexableField
float values for efficient range filtering and sorting. Here's an
example usage:
document.add(new LegacyFloatField(name, 6.0F, Field.Store.NO));For optimal performance, re-use the
LegacyFloatField and Document instance
for more than one document:
LegacyFloatField field = new LegacyFloatField(name, 0.0F, Field.Store.NO);
Document document = new Document();
document.add(field);
for(all documents) {
...
field.setFloatValue(value)
writer.addDocument(document);
...
}
See also LegacyIntField, LegacyLongField, LegacyDoubleField.
To perform range querying or filtering against a LegacyFloatField, use LegacyNumericRangeQuery. To sort according to a LegacyFloatField
, use the normal numeric sort types, eg SortField.Type.FLOAT. LegacyFloatField values can also be
loaded directly from LeafReader.getNumericDocValues(java.lang.String).
You may add the same field name as an LegacyFloatField 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 LegacyFloatField
.
A LegacyFloatField 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, 8, was selected for a reasonable tradeoff of disk
space consumption versus performance. You can create a custom LegacyFieldType and invoke
the LegacyFieldType.setNumericPrecisionStep(int) method if you'd like to change the value.
Note that you must also specify a congruent value when creating LegacyNumericRangeQuery. 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 LegacyNumericRangeQuery. The format of indexed
values is described in LegacyNumericUtils.
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 LegacyNumericTokenStream
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
org.apache.lucene.document.Field.Store -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final LegacyFieldTypeDeprecated.Type for a LegacyFloatField that is not stored: normalization factors, frequencies, and positions are omitted.static final LegacyFieldTypeDeprecated.Type for a stored LegacyFloatField: normalization factors, frequencies, and positions are omitted.Fields inherited from class org.apache.lucene.document.Field
fieldsData, name, type -
Constructor Summary
ConstructorsConstructorDescriptionLegacyFloatField(String name, float value, org.apache.lucene.document.Field.Store stored) Deprecated.Creates a stored or un-stored LegacyFloatField with the provided value and defaultprecisionStepLegacyNumericUtils.PRECISION_STEP_DEFAULT_32(8).LegacyFloatField(String name, float value, LegacyFieldType type) Deprecated.Expert: allows you to customize theLegacyFieldType. -
Method Summary
Methods inherited from class org.apache.solr.legacy.LegacyField
setTokenStream, tokenStreamMethods inherited from class org.apache.lucene.document.Field
binaryValue, fieldType, getCharSequenceValue, invertableType, name, numericValue, readerValue, setBytesValue, setBytesValue, setByteValue, setDoubleValue, setFloatValue, setIntValue, setLongValue, setReaderValue, setShortValue, setStringValue, storedValue, stringValue, tokenStreamValue, toString
-
Field Details
-
TYPE_NOT_STORED
Deprecated.Type for a LegacyFloatField that is not stored: normalization factors, frequencies, and positions are omitted. -
TYPE_STORED
Deprecated.Type for a stored LegacyFloatField: normalization factors, frequencies, and positions are omitted.
-
-
Constructor Details
-
LegacyFloatField
Deprecated.Creates a stored or un-stored LegacyFloatField with the provided value and defaultprecisionStepLegacyNumericUtils.PRECISION_STEP_DEFAULT_32(8).- Parameters:
name- field namevalue- 32-bit double valuestored- Store.YES if the content should also be stored- Throws:
IllegalArgumentException- if the field name is null.
-
LegacyFloatField
Deprecated.Expert: allows you to customize theLegacyFieldType.- Parameters:
name- field namevalue- 32-bit float valuetype- customized field type: must haveLegacyFieldType.numericType()ofLegacyNumericType.FLOAT.- Throws:
IllegalArgumentException- if the field name or type is null, or if the field type does not have a FLOAT numericType()
-
FloatPointinstead