Package org.apache.lucene.spatial.bbox
Class BBoxStrategy
java.lang.Object
org.apache.lucene.spatial.SpatialStrategy
org.apache.lucene.spatial.bbox.BBoxStrategy
A SpatialStrategy for indexing and searching Rectangles by storing its coordinates in numeric
fields. It supports all
SpatialOperation
s and has a custom overlap relevancy. It is based
on GeoPortal's SpatialClauseAdapter.
Characteristics:
- Only indexes Rectangles; just one per field value. Other shapes can be provided and the bounding box will be used.
- Can query only by a Rectangle. Providing other shapes is an error.
- Supports most
SpatialOperation
s but not Overlaps. - Uses the DocValues API for any sorting / relevancy.
Implementation:
This uses 4 double fields for minX, maxX, minY, maxY and a boolean to mark a dateline cross.
Depending on the particular SpatialOperation
s, there are a variety of range queries on
DoublePoint
s to be done. The makeOverlapRatioValueSource(org.locationtech.spatial4j.shape.Rectangle, double)
works by
calculating the query bbox overlap percentage against the indexed shape overlap percentage. The
indexed shape's coordinates are retrieved from LeafReader.getNumericDocValues(java.lang.String)
.
- WARNING: This API is experimental and might change in incompatible ways in the next release.
-
Field Summary
Modifier and TypeFieldDescriptionstatic FieldType
pointValues, docValues, and nothing else.static final String
static final String
static final String
static final String
static final String
Fields inherited from class org.apache.lucene.spatial.SpatialStrategy
ctx
-
Constructor Summary
ConstructorDescriptionBBoxStrategy
(org.locationtech.spatial4j.context.SpatialContext ctx, String fieldNamePrefix, FieldType fieldType) Creates this strategy. -
Method Summary
Modifier and TypeMethodDescriptionField[]
createIndexableFields
(org.locationtech.spatial4j.shape.Shape shape) Returns the IndexableField(s) from theshape
that are to be added to theDocument
.Returns a field type representing the set of field options.makeDistanceValueSource
(org.locationtech.spatial4j.shape.Point queryPoint, double multiplier) Make a ValueSource returning the distance between the center of the indexed shape andqueryPoint
.makeOverlapRatioValueSource
(org.locationtech.spatial4j.shape.Rectangle queryBox, double queryTargetProportion) Returns a similarity based onBBoxOverlapRatioValueSource
.makeQuery
(SpatialArgs args) Provides access to each rectangle per document as aShapeValuesSource
static BBoxStrategy
newInstance
(org.locationtech.spatial4j.context.SpatialContext ctx, String fieldNamePrefix) Creates a newBBoxStrategy
instance that usesDoublePoint
andDoublePoint.newRangeQuery(java.lang.String, double, double)
Methods inherited from class org.apache.lucene.spatial.SpatialStrategy
getFieldName, getSpatialContext, makeDistanceValueSource, makeRecipDistanceValueSource, toString
-
Field Details
-
DEFAULT_FIELDTYPE
pointValues, docValues, and nothing else. -
SUFFIX_MINX
- See Also:
-
SUFFIX_MAXX
- See Also:
-
SUFFIX_MINY
- See Also:
-
SUFFIX_MAXY
- See Also:
-
SUFFIX_XDL
- See Also:
-
-
Constructor Details
-
BBoxStrategy
public BBoxStrategy(org.locationtech.spatial4j.context.SpatialContext ctx, String fieldNamePrefix, FieldType fieldType) Creates this strategy.fieldType
is used to customize the indexing options of the 4 number fields, and to a lesser degree the XDL field too. Search requires pointValues (or legacy numerics), and relevancy requires docValues. If these features aren't needed then disable them.
-
-
Method Details
-
newInstance
public static BBoxStrategy newInstance(org.locationtech.spatial4j.context.SpatialContext ctx, String fieldNamePrefix) Creates a newBBoxStrategy
instance that usesDoublePoint
andDoublePoint.newRangeQuery(java.lang.String, double, double)
-
getFieldType
Returns a field type representing the set of field options. This is identical to what was passed into the constructor. It's frozen. -
createIndexableFields
Description copied from class:SpatialStrategy
Returns the IndexableField(s) from theshape
that are to be added to theDocument
. These fields are expected to be marked as indexed and not stored.Note: If you want to store the shape as a string for retrieval in search results, you could add it like this:
document.add(new StoredField(fieldName,ctx.toString(shape)));
The particular string representation used doesn't matter to the Strategy since it doesn't use it.- Specified by:
createIndexableFields
in classSpatialStrategy
- Returns:
- Not null nor will it have null elements.
-
makeShapeValueSource
Provides access to each rectangle per document as aShapeValuesSource
-
makeDistanceValueSource
public DoubleValuesSource makeDistanceValueSource(org.locationtech.spatial4j.shape.Point queryPoint, double multiplier) Description copied from class:SpatialStrategy
Make a ValueSource returning the distance between the center of the indexed shape andqueryPoint
. If there are multiple indexed shapes then the closest one is chosen. The result is multiplied bymultiplier
, which conveniently is used to get the desired units.- Specified by:
makeDistanceValueSource
in classSpatialStrategy
-
makeOverlapRatioValueSource
public DoubleValuesSource makeOverlapRatioValueSource(org.locationtech.spatial4j.shape.Rectangle queryBox, double queryTargetProportion) Returns a similarity based onBBoxOverlapRatioValueSource
. This is just a convenience method. -
makeQuery
Description copied from class:SpatialStrategy
Make a Query based principally onSpatialOperation
andShape
from the suppliedargs
. It should be constant scoring of 1.- Specified by:
makeQuery
in classSpatialStrategy
-