public class LongRange extends Field
This field indexes dimensional ranges defined as min/max pairs. It supports up to a maximum of 4 dimensions (indexed as 8 numeric values). With 1 dimension representing a single long range, 2 dimensions representing a bounding box, 3 dimensions a bounding cube, and 4 dimensions a tesseract.
Multiple values for the same field in one document is supported, and open ended ranges can be defined using
Long.MIN_VALUE and Long.MAX_VALUE.
This field defines the following static factory methods for common search operations over long ranges:
newIntersectsQuery() matches ranges that intersect the defined search range.
newWithinQuery() matches ranges that are within the defined search range.
newContainsQuery() matches ranges that contain the defined search range.
Field.Store| Modifier and Type | Field and Description |
|---|---|
static int |
BYTES
stores long values so number of bytes is 8
|
fieldsData, name, tokenStream, type| Constructor and Description |
|---|
LongRange(java.lang.String name,
long[] min,
long[] max)
Create a new LongRange type, from min/max parallel arrays
|
| Modifier and Type | Method and Description |
|---|---|
private static void |
checkArgs(long[] min,
long[] max)
validate the arguments
|
(package private) static long |
decodeMax(byte[] b,
int dimension)
decodes the max value (for the defined dimension) from the encoded input byte array
|
(package private) static long |
decodeMin(byte[] b,
int dimension)
decodes the min value (for the defined dimension) from the encoded input byte array
|
private static byte[] |
encode(long[] min,
long[] max)
Encodes the min, max ranges into a byte array
|
private static void |
encode(long val,
byte[] bytes,
int offset)
encode the given value into the byte array at the defined offset
|
long |
getMax(int dimension)
Get the max value for the given dimension
|
long |
getMin(int dimension)
Get the min value for the given dimension
|
private static FieldType |
getType(int dimensions)
set the field type
|
static Query |
newContainsQuery(java.lang.String field,
long[] min,
long[] max)
Create a query for matching indexed ranges that contain the defined range.
|
static Query |
newCrossesQuery(java.lang.String field,
long[] min,
long[] max)
Create a query for matching indexed ranges that cross the defined range.
|
static Query |
newIntersectsQuery(java.lang.String field,
long[] min,
long[] max)
Create a query for matching indexed ranges that intersect the defined range.
|
private static Query |
newRelationQuery(java.lang.String field,
long[] min,
long[] max,
RangeFieldQuery.QueryType relation)
helper method for creating the desired relational query
|
static Query |
newWithinQuery(java.lang.String field,
long[] min,
long[] max)
Create a query for matching indexed ranges that are within the defined range.
|
void |
setRangeValues(long[] min,
long[] max)
Changes the values of the field.
|
java.lang.String |
toString()
Prints a Field for human consumption.
|
private static java.lang.String |
toString(byte[] ranges,
int dimension)
Returns the String representation for the range at the given dimension
|
(package private) static void |
verifyAndEncode(long[] min,
long[] max,
byte[] bytes)
encode the ranges into a sortable byte array (
Double.NaN not allowed) |
binaryValue, fieldType, getCharSequenceValue, name, numericValue, readerValue, setBytesValue, setBytesValue, setByteValue, setDoubleValue, setFloatValue, setIntValue, setLongValue, setReaderValue, setShortValue, setStringValue, setTokenStream, stringValue, tokenStream, tokenStreamValuepublic static final int BYTES
public LongRange(java.lang.String name,
long[] min,
long[] max)
name - field name. must not be null.min - range min values; each entry is the min value for the dimensionmax - range max values; each entry is the max value for the dimensionprivate static FieldType getType(int dimensions)
public void setRangeValues(long[] min,
long[] max)
min - array of min values. (accepts Long.MIN_VALUE)max - array of max values. (accepts Long.MAX_VALUE)java.lang.IllegalArgumentException - if min or max is invalidprivate static void checkArgs(long[] min,
long[] max)
private static byte[] encode(long[] min,
long[] max)
static void verifyAndEncode(long[] min,
long[] max,
byte[] bytes)
Double.NaN not allowed)
example for 4 dimensions (8 bytes per dimension value): minD1 ... minD4 | maxD1 ... maxD4
private static void encode(long val,
byte[] bytes,
int offset)
public long getMin(int dimension)
dimension - the dimension, always positivepublic long getMax(int dimension)
dimension - the dimension, always positivestatic long decodeMin(byte[] b,
int dimension)
static long decodeMax(byte[] b,
int dimension)
public static Query newIntersectsQuery(java.lang.String field, long[] min, long[] max)
field - field name. must not be null.min - array of min values. (accepts Long.MIN_VALUE)max - array of max values. (accepts Long.MAX_VALUE)java.lang.IllegalArgumentException - if field is null, min or max is invalidpublic static Query newContainsQuery(java.lang.String field, long[] min, long[] max)
field - field name. must not be null.min - array of min values. (accepts Long.MIN_VALUE)max - array of max values. (accepts Long.MAX_VALUE)java.lang.IllegalArgumentException - if field is null, min or max is invalidpublic static Query newWithinQuery(java.lang.String field, long[] min, long[] max)
field - field name. must not be null.min - array of min values. (accepts Long.MIN_VALUE)max - array of max values. (accepts Long.MAX_VALUE)java.lang.IllegalArgumentException - if field is null, min or max is invalidpublic static Query newCrossesQuery(java.lang.String field, long[] min, long[] max)
field - field name. must not be null.min - array of min values. (accepts Long.MIN_VALUE)max - array of max values. (accepts Long.MAX_VALUE)java.lang.IllegalArgumentException - if field is null, min or max is invalidprivate static Query newRelationQuery(java.lang.String field, long[] min, long[] max, RangeFieldQuery.QueryType relation)
public java.lang.String toString()
Fieldprivate static java.lang.String toString(byte[] ranges,
int dimension)
ranges - the encoded ranges, never nulldimension - the dimension of interest