LongPoint
instead@Deprecated public final class LegacyLongField extends LegacyField
Field that indexes long
values
for efficient range filtering and sorting. Here's an example usage:
document.add(new LegacyLongField(name, 6L, Field.Store.NO));For optimal performance, re-use the
LegacyLongField
and
Document
instance for more than one document:
LegacyLongField field = new LegacyLongField(name, 0L, Field.Store.NO); Document document = new Document(); document.add(field); for(all documents) { ... field.setLongValue(value) writer.addDocument(document); ... }See also
LegacyIntField
, LegacyFloatField
, LegacyDoubleField
.
Any type that can be converted to long can also be
indexed. For example, date/time values represented by a
Date
can be translated into a long
value using the Date.getTime()
method. If you
don't need millisecond precision, you can quantize the
value, either by dividing the result of
Date.getTime()
or using the separate getters
(for year, month, etc.) to construct an int
or
long
value.
To perform range querying or filtering against a
LegacyLongField
, use LegacyNumericRangeQuery
.
To sort according to a
LegacyLongField
, use the normal numeric sort types, eg
SortField.Type.LONG
. LegacyLongField
values can also be loaded directly from LeafReader.getNumericDocValues(java.lang.String)
.
You may add the same field name as an LegacyLongField
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 LegacyLongField
.
A LegacyLongField
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, 16, 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.
Field.Store
Modifier and Type | Field and Description |
---|---|
static LegacyFieldType |
TYPE_NOT_STORED
Deprecated.
Type for a LegacyLongField that is not stored:
normalization factors, frequencies, and positions are omitted.
|
static LegacyFieldType |
TYPE_STORED
Deprecated.
Type for a stored LegacyLongField:
normalization factors, frequencies, and positions are omitted.
|
fieldsData, name, tokenStream, type
Constructor and Description |
---|
LegacyLongField(String name,
long value,
Field.Store stored)
Deprecated.
Creates a stored or un-stored LegacyLongField with the provided value
and default
precisionStep LegacyNumericUtils.PRECISION_STEP_DEFAULT (16). |
LegacyLongField(String name,
long value,
LegacyFieldType type)
Deprecated.
Expert: allows you to customize the
LegacyFieldType . |
setTokenStream, tokenStream
binaryValue, fieldType, getCharSequenceValue, name, numericValue, readerValue, setBytesValue, setBytesValue, setByteValue, setDoubleValue, setFloatValue, setIntValue, setLongValue, setReaderValue, setShortValue, setStringValue, stringValue, tokenStreamValue, toString
public static final LegacyFieldType TYPE_NOT_STORED
public static final LegacyFieldType TYPE_STORED
public LegacyLongField(String name, long value, Field.Store stored)
precisionStep
LegacyNumericUtils.PRECISION_STEP_DEFAULT
(16).name
- field namevalue
- 64-bit long valuestored
- Store.YES if the content should also be storedIllegalArgumentException
- if the field name is null.public LegacyLongField(String name, long value, LegacyFieldType type)
LegacyFieldType
.name
- field namevalue
- 64-bit long valuetype
- customized field type: must have LegacyFieldType.numericType()
of LegacyNumericType.LONG
.IllegalArgumentException
- if the field name or type is null, or
if the field type does not have a LONG numericType()Copyright © 2000-2020 Apache Software Foundation. All Rights Reserved.