Class LegacyNumericUtils
- java.lang.Object
-
- org.apache.solr.legacy.LegacyNumericUtils
-
@Deprecated public final class LegacyNumericUtils extends Object
Deprecated.Please usePointValues
instead.This is a helper class to generate prefix-encoded representations for numerical values and supplies converters to represent float/double values as sortable integers/longs.To quickly execute range queries in Apache Lucene, a range is divided recursively into multiple intervals for searching: The center of the range is searched only with the lowest possible precision in the trie, while the boundaries are matched more exactly. This reduces the number of terms dramatically.
This class generates terms to achieve this: First the numerical integer values need to be converted to bytes. For that integer values (32 bit or 64 bit) are made unsigned and the bits are converted to ASCII chars with each 7 bit. The resulting byte[] is sortable like the original integer value (even using UTF-8 sort order). Each value is also prefixed (in the first char) by the
shift
value (number of bits removed) used during encoding.For easy usage, the trie algorithm is implemented for indexing inside
LegacyNumericTokenStream
that can indexint
,long
,float
, anddouble
. For querying,LegacyNumericRangeQuery
implements the query part for the same data types.- Since:
- 2.9, API changed non backwards-compliant in 4.0
- NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
LegacyNumericUtils.IntRangeBuilder
Deprecated.static class
LegacyNumericUtils.LongRangeBuilder
Deprecated.
-
Field Summary
Fields Modifier and Type Field Description static int
BUF_SIZE_INT
Deprecated.The maximum term length (used forbyte[]
buffer size) for encodingint
values.static int
BUF_SIZE_LONG
Deprecated.The maximum term length (used forbyte[]
buffer size) for encodinglong
values.static int
PRECISION_STEP_DEFAULT
Deprecated.The default precision step used byLegacyLongField
,LegacyDoubleField
,LegacyNumericTokenStream
,LegacyNumericRangeQuery
.static int
PRECISION_STEP_DEFAULT_32
Deprecated.The default precision step used byLegacyIntField
andLegacyFloatField
.static byte
SHIFT_START_INT
Deprecated.Integers are stored at lower precision by shifting off lower bits.static byte
SHIFT_START_LONG
Deprecated.Longs are stored at lower precision by shifting off lower bits.
-
Method Summary
All Methods Static Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static org.apache.lucene.index.TermsEnum
filterPrefixCodedInts(org.apache.lucene.index.TermsEnum termsEnum)
Deprecated.Filters the givenTermsEnum
by accepting only prefix coded 32 bit terms with a shift value of 0.static org.apache.lucene.index.TermsEnum
filterPrefixCodedLongs(org.apache.lucene.index.TermsEnum termsEnum)
Deprecated.Filters the givenTermsEnum
by accepting only prefix coded 64 bit terms with a shift value of 0.static Integer
getMaxInt(org.apache.lucene.index.Terms terms)
Deprecated.Returns the maximum int value indexed into this numeric field or null if no terms exist.static Long
getMaxLong(org.apache.lucene.index.Terms terms)
Deprecated.Returns the maximum long value indexed into this numeric field or null if no terms exist.static Integer
getMinInt(org.apache.lucene.index.Terms terms)
Deprecated.Returns the minimum int value indexed into this numeric field or null if no terms exist.static Long
getMinLong(org.apache.lucene.index.Terms terms)
Deprecated.Returns the minimum long value indexed into this numeric field or null if no terms exist.static int
getPrefixCodedIntShift(org.apache.lucene.util.BytesRef val)
Deprecated.Returns the shift value from a prefix encodedint
.static int
getPrefixCodedLongShift(org.apache.lucene.util.BytesRef val)
Deprecated.Returns the shift value from a prefix encodedlong
.static void
intToPrefixCoded(int val, int shift, org.apache.lucene.util.BytesRefBuilder bytes)
Deprecated.Returns prefix coded bits after reducing the precision byshift
bits.static void
longToPrefixCoded(long val, int shift, org.apache.lucene.util.BytesRefBuilder bytes)
Deprecated.Returns prefix coded bits after reducing the precision byshift
bits.static int
prefixCodedToInt(org.apache.lucene.util.BytesRef val)
Deprecated.Returns an int from prefixCoded bytes.static long
prefixCodedToLong(org.apache.lucene.util.BytesRef val)
Deprecated.Returns a long from prefixCoded bytes.static void
splitIntRange(LegacyNumericUtils.IntRangeBuilder builder, int precisionStep, int minBound, int maxBound)
Deprecated.Splits an int range recursively.static void
splitLongRange(LegacyNumericUtils.LongRangeBuilder builder, int precisionStep, long minBound, long maxBound)
Deprecated.Splits a long range recursively.
-
-
-
Field Detail
-
PRECISION_STEP_DEFAULT
public static final int PRECISION_STEP_DEFAULT
Deprecated.The default precision step used byLegacyLongField
,LegacyDoubleField
,LegacyNumericTokenStream
,LegacyNumericRangeQuery
.- See Also:
- Constant Field Values
-
PRECISION_STEP_DEFAULT_32
public static final int PRECISION_STEP_DEFAULT_32
Deprecated.The default precision step used byLegacyIntField
andLegacyFloatField
.- See Also:
- Constant Field Values
-
SHIFT_START_LONG
public static final byte SHIFT_START_LONG
Deprecated.Longs are stored at lower precision by shifting off lower bits. The shift count is stored asSHIFT_START_LONG+shift
in the first byte- See Also:
- Constant Field Values
-
BUF_SIZE_LONG
public static final int BUF_SIZE_LONG
Deprecated.The maximum term length (used forbyte[]
buffer size) for encodinglong
values.
-
SHIFT_START_INT
public static final byte SHIFT_START_INT
Deprecated.Integers are stored at lower precision by shifting off lower bits. The shift count is stored asSHIFT_START_INT+shift
in the first byte- See Also:
- Constant Field Values
-
BUF_SIZE_INT
public static final int BUF_SIZE_INT
Deprecated.The maximum term length (used forbyte[]
buffer size) for encodingint
values.
-
-
Method Detail
-
longToPrefixCoded
public static void longToPrefixCoded(long val, int shift, org.apache.lucene.util.BytesRefBuilder bytes)
Deprecated.Returns prefix coded bits after reducing the precision byshift
bits. This is method is used byLegacyNumericTokenStream
. After encoding,bytes.offset
will always be 0.- Parameters:
val
- the numeric valueshift
- how many bits to strip from the rightbytes
- will contain the encoded value
-
intToPrefixCoded
public static void intToPrefixCoded(int val, int shift, org.apache.lucene.util.BytesRefBuilder bytes)
Deprecated.Returns prefix coded bits after reducing the precision byshift
bits. This is method is used byLegacyNumericTokenStream
. After encoding,bytes.offset
will always be 0.- Parameters:
val
- the numeric valueshift
- how many bits to strip from the rightbytes
- will contain the encoded value
-
getPrefixCodedLongShift
public static int getPrefixCodedLongShift(org.apache.lucene.util.BytesRef val)
Deprecated.Returns the shift value from a prefix encodedlong
.- Throws:
NumberFormatException
- if the suppliedBytesRef
is not correctly prefix encoded.
-
getPrefixCodedIntShift
public static int getPrefixCodedIntShift(org.apache.lucene.util.BytesRef val)
Deprecated.Returns the shift value from a prefix encodedint
.- Throws:
NumberFormatException
- if the suppliedBytesRef
is not correctly prefix encoded.
-
prefixCodedToLong
public static long prefixCodedToLong(org.apache.lucene.util.BytesRef val)
Deprecated.Returns a long from prefixCoded bytes. Rightmost bits will be zero for lower precision codes. This method can be used to decode a term's value.- Throws:
NumberFormatException
- if the suppliedBytesRef
is not correctly prefix encoded.- See Also:
longToPrefixCoded(long, int, org.apache.lucene.util.BytesRefBuilder)
-
prefixCodedToInt
public static int prefixCodedToInt(org.apache.lucene.util.BytesRef val)
Deprecated.Returns an int from prefixCoded bytes. Rightmost bits will be zero for lower precision codes. This method can be used to decode a term's value.- Throws:
NumberFormatException
- if the suppliedBytesRef
is not correctly prefix encoded.- See Also:
intToPrefixCoded(int, int, org.apache.lucene.util.BytesRefBuilder)
-
splitLongRange
public static void splitLongRange(LegacyNumericUtils.LongRangeBuilder builder, int precisionStep, long minBound, long maxBound)
Deprecated.Splits a long range recursively. You may implement a builder that adds clauses to aBooleanQuery
for each call to itsLegacyNumericUtils.LongRangeBuilder.addRange(BytesRef,BytesRef)
method.This method is used by
LegacyNumericRangeQuery
.
-
splitIntRange
public static void splitIntRange(LegacyNumericUtils.IntRangeBuilder builder, int precisionStep, int minBound, int maxBound)
Deprecated.Splits an int range recursively. You may implement a builder that adds clauses to aBooleanQuery
for each call to itsLegacyNumericUtils.IntRangeBuilder.addRange(BytesRef,BytesRef)
method.This method is used by
LegacyNumericRangeQuery
.
-
filterPrefixCodedLongs
public static org.apache.lucene.index.TermsEnum filterPrefixCodedLongs(org.apache.lucene.index.TermsEnum termsEnum)
Deprecated.Filters the givenTermsEnum
by accepting only prefix coded 64 bit terms with a shift value of 0.- Parameters:
termsEnum
- the terms enum to filter- Returns:
- a filtered
TermsEnum
that only returns prefix coded 64 bit terms with a shift value of 0.
-
filterPrefixCodedInts
public static org.apache.lucene.index.TermsEnum filterPrefixCodedInts(org.apache.lucene.index.TermsEnum termsEnum)
Deprecated.Filters the givenTermsEnum
by accepting only prefix coded 32 bit terms with a shift value of 0.- Parameters:
termsEnum
- the terms enum to filter- Returns:
- a filtered
TermsEnum
that only returns prefix coded 32 bit terms with a shift value of 0.
-
getMinInt
public static Integer getMinInt(org.apache.lucene.index.Terms terms) throws IOException
Deprecated.Returns the minimum int value indexed into this numeric field or null if no terms exist.- Throws:
IOException
-
getMaxInt
public static Integer getMaxInt(org.apache.lucene.index.Terms terms) throws IOException
Deprecated.Returns the maximum int value indexed into this numeric field or null if no terms exist.- Throws:
IOException
-
getMinLong
public static Long getMinLong(org.apache.lucene.index.Terms terms) throws IOException
Deprecated.Returns the minimum long value indexed into this numeric field or null if no terms exist.- Throws:
IOException
-
getMaxLong
public static Long getMaxLong(org.apache.lucene.index.Terms terms) throws IOException
Deprecated.Returns the maximum long value indexed into this numeric field or null if no terms exist.- Throws:
IOException
-
-