public class PointVectorStrategy extends SpatialStrategy
SpatialStrategy
which represents Points in two numeric DoubleField
s. The Strategy's best feature is decent distance sort.
Characteristics:
SpatialOperation.Intersects
and SpatialOperation.IsWithin
is supported.SpatialStrategy.makeDistanceValueSource(com.spatial4j.core.shape.Point)
and for
searching with a Circle.Implementation:
This is a simple Strategy. Search works with NumericRangeQuery
s on
an x and y pair of fields. A Circle query does the same bbox query but adds a
ValueSource filter on
SpatialStrategy.makeDistanceValueSource(com.spatial4j.core.shape.Point)
.
One performance shortcoming with this strategy is that a scenario involving both a search using a Circle and sort will result in calculations for the spatial distance being done twice -- once for the filter and second for the sort.
Modifier and Type | Field and Description |
---|---|
int |
precisionStep |
static String |
SUFFIX_X |
static String |
SUFFIX_Y |
ctx
Constructor and Description |
---|
PointVectorStrategy(com.spatial4j.core.context.SpatialContext ctx,
String fieldNamePrefix) |
Modifier and Type | Method and Description |
---|---|
Field[] |
createIndexableFields(com.spatial4j.core.shape.Point point) |
Field[] |
createIndexableFields(com.spatial4j.core.shape.Shape shape)
Returns the IndexableField(s) from the
shape that are to be
added to the Document . |
ValueSource |
makeDistanceValueSource(com.spatial4j.core.shape.Point queryPoint,
double multiplier)
Make a ValueSource returning the distance between the center of the
indexed shape and
queryPoint . |
ConstantScoreQuery |
makeQuery(SpatialArgs args)
|
void |
setPrecisionStep(int p) |
getFieldName, getSpatialContext, makeDistanceValueSource, makeRecipDistanceValueSource, toString
public static final String SUFFIX_X
public static final String SUFFIX_Y
public int precisionStep
public PointVectorStrategy(com.spatial4j.core.context.SpatialContext ctx, String fieldNamePrefix)
public void setPrecisionStep(int p)
public Field[] createIndexableFields(com.spatial4j.core.shape.Shape shape)
SpatialStrategy
shape
that are to be
added to the Document
. 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.
createIndexableFields
in class SpatialStrategy
public Field[] createIndexableFields(com.spatial4j.core.shape.Point point)
public ValueSource makeDistanceValueSource(com.spatial4j.core.shape.Point queryPoint, double multiplier)
SpatialStrategy
queryPoint
. If there are multiple indexed shapes
then the closest one is chosen. The result is multiplied by multiplier
, which
conveniently is used to get the desired units.makeDistanceValueSource
in class SpatialStrategy
public ConstantScoreQuery makeQuery(SpatialArgs args)
SpatialStrategy
SpatialOperation
and Shape
from the supplied args
. It should be constant scoring of 1.makeQuery
in class SpatialStrategy
Copyright © 2000-2016 Apache Software Foundation. All Rights Reserved.