Package org.apache.lucene.document
Class LatLonPoint
- java.lang.Object
-
- org.apache.lucene.document.Field
-
- org.apache.lucene.document.LatLonPoint
-
- All Implemented Interfaces:
IndexableField
public class LatLonPoint extends Field
An indexed location field.Finding all documents within a range at search time is efficient. Multiple values for the same field in one document is allowed.
This field defines static factory methods for common operations:
newBoxQuery()
for matching points within a bounding box.newDistanceQuery()
for matching points within a specified distance.newPolygonQuery()
for matching points within an arbitrary polygon.newGeometryQuery()
for matching points within an arbitrary geometry collection.
If you also need per-document operations such as sort by distance, add a separate
LatLonDocValuesField
instance. If you also need to store the value, you should add a separateStoredField
instance.WARNING: Values are indexed with some loss of precision from the original
double
values (4.190951585769653E-8 for the latitude component and 8.381903171539307E-8 for longitude).- See Also:
PointValues
,LatLonDocValuesField
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.lucene.document.Field
Field.Store
-
-
Field Summary
Fields Modifier and Type Field Description static int
BYTES
LatLonPoint is encoded as integer values so number of bytes is 4static FieldType
TYPE
Type for an indexed LatLonPoint-
Fields inherited from class org.apache.lucene.document.Field
fieldsData, name, tokenStream, type
-
-
Constructor Summary
Constructors Constructor Description LatLonPoint(String name, double latitude, double longitude)
Creates a new LatLonPoint with the specified latitude and longitude
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static Query
newBoxQuery(String field, double minLatitude, double maxLatitude, double minLongitude, double maxLongitude)
Create a query for matching a bounding box.static Query
newDistanceFeatureQuery(String field, float weight, double originLat, double originLon, double pivotDistanceMeters)
Given a field that indexes point values into aLatLonPoint
and doc values intoLatLonDocValuesField
, this returns a query that scores documents based on their haversine distance in meters to(originLat, originLon)
:score = weight * pivotDistanceMeters / (pivotDistanceMeters + distance)
, ie.static Query
newDistanceQuery(String field, double latitude, double longitude, double radiusMeters)
Create a query for matching points within the specified distance of the supplied location.static Query
newGeometryQuery(String field, ShapeField.QueryRelation queryRelation, LatLonGeometry... latLonGeometries)
Create a query for matching one or more geometries against the providedShapeField.QueryRelation
.static Query
newPolygonQuery(String field, Polygon... polygons)
Create a query for matching one or more polygons.void
setLocationValue(double latitude, double longitude)
Change the values of this fieldString
toString()
Prints a Field for human consumption.-
Methods 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, setTokenStream, storedValue, stringValue, tokenStream, tokenStreamValue
-
-
-
-
Field Detail
-
BYTES
public static final int BYTES
LatLonPoint is encoded as integer values so number of bytes is 4- See Also:
- Constant Field Values
-
TYPE
public static final FieldType TYPE
Type for an indexed LatLonPointEach point stores two dimensions with 4 bytes per dimension.
-
-
Constructor Detail
-
LatLonPoint
public LatLonPoint(String name, double latitude, double longitude)
Creates a new LatLonPoint with the specified latitude and longitude- Parameters:
name
- field namelatitude
- latitude value: must be within standard +/-90 coordinate bounds.longitude
- longitude value: must be within standard +/-180 coordinate bounds.- Throws:
IllegalArgumentException
- if the field name is null or latitude or longitude are out of bounds
-
-
Method Detail
-
setLocationValue
public void setLocationValue(double latitude, double longitude)
Change the values of this field- Parameters:
latitude
- latitude value: must be within standard +/-90 coordinate bounds.longitude
- longitude value: must be within standard +/-180 coordinate bounds.- Throws:
IllegalArgumentException
- if latitude or longitude are out of bounds
-
toString
public String toString()
Description copied from class:Field
Prints a Field for human consumption.
-
newBoxQuery
public static Query newBoxQuery(String field, double minLatitude, double maxLatitude, double minLongitude, double maxLongitude)
Create a query for matching a bounding box.The box may cross over the dateline.
- Parameters:
field
- field name. must not be null.minLatitude
- latitude lower bound: must be within standard +/-90 coordinate bounds.maxLatitude
- latitude upper bound: must be within standard +/-90 coordinate bounds.minLongitude
- longitude lower bound: must be within standard +/-180 coordinate bounds.maxLongitude
- longitude upper bound: must be within standard +/-180 coordinate bounds.- Returns:
- query matching points within this box
- Throws:
IllegalArgumentException
- iffield
is null, or the box has invalid coordinates.
-
newDistanceQuery
public static Query newDistanceQuery(String field, double latitude, double longitude, double radiusMeters)
Create a query for matching points within the specified distance of the supplied location.- Parameters:
field
- field name. must not be null.latitude
- latitude at the center: must be within standard +/-90 coordinate bounds.longitude
- longitude at the center: must be within standard +/-180 coordinate bounds.radiusMeters
- maximum distance from the center in meters: must be non-negative and finite.- Returns:
- query matching points within this distance
- Throws:
IllegalArgumentException
- iffield
is null, location has invalid coordinates, or radius is invalid.
-
newPolygonQuery
public static Query newPolygonQuery(String field, Polygon... polygons)
Create a query for matching one or more polygons.- Parameters:
field
- field name. must not be null.polygons
- array of polygons. must not be null or empty- Returns:
- query matching points within this polygon
- Throws:
IllegalArgumentException
- iffield
is null,polygons
is null or empty- See Also:
Polygon
-
newGeometryQuery
public static Query newGeometryQuery(String field, ShapeField.QueryRelation queryRelation, LatLonGeometry... latLonGeometries)
Create a query for matching one or more geometries against the providedShapeField.QueryRelation
. Line geometries are not supported for WITHIN relationship.- Parameters:
field
- field name. must not be null.queryRelation
- The relation the points needs to satisfy with the provided geometries, must not be null.latLonGeometries
- array of LatLonGeometries. must not be null or empty.- Returns:
- query matching points within at least one geometry.
- Throws:
IllegalArgumentException
- iffield
is null,queryRelation
is null,latLonGeometries
is null, empty or contain a null.- See Also:
LatLonGeometry
-
newDistanceFeatureQuery
public static Query newDistanceFeatureQuery(String field, float weight, double originLat, double originLon, double pivotDistanceMeters)
Given a field that indexes point values into aLatLonPoint
and doc values intoLatLonDocValuesField
, this returns a query that scores documents based on their haversine distance in meters to(originLat, originLon)
:score = weight * pivotDistanceMeters / (pivotDistanceMeters + distance)
, ie. score is in the[0, weight]
range, is equal toweight
when the document's value is equal to(originLat, originLon)
and is equal toweight/2
when the document's value is distant ofpivotDistanceMeters
from(originLat, originLon)
. In case of multi-valued fields, only the closest point to(originLat, originLon)
will be considered. This query is typically useful to boost results based on distance by adding this query to aBooleanClause.Occur.SHOULD
clause of aBooleanQuery
.
-
-