org.apache.lucene.spatial.prefix

Class PrefixTreeStrategy

  • Direct Known Subclasses:
    RecursivePrefixTreeStrategy, TermQueryPrefixTreeStrategy


    public abstract class PrefixTreeStrategy
    extends SpatialStrategy
    An abstract SpatialStrategy based on SpatialPrefixTree. The two subclasses are RecursivePrefixTreeStrategy and TermQueryPrefixTreeStrategy. This strategy is most effective as a fast approximate spatial search filter.

    Characteristics:

    • Can index any shape; however only RecursivePrefixTreeStrategy can effectively search non-point shapes.
    • Can index a variable number of shapes per field value. This strategy can do it via multiple calls to #createIndexableFields(org.locationtech.spatial4j.shape.Shape) for a document or by giving it some sort of Shape aggregate (e.g. JTS WKT MultiPoint). The shape's boundary is approximated to a grid precision.
    • Can query with any shape. The shape's boundary is approximated to a grid precision.
    • Only SpatialOperation.Intersects is supported. If only points are indexed then this is effectively equivalent to IsWithin.
    • The strategy supports #makeDistanceValueSource(org.locationtech.spatial4j.shape.Point,double) even for multi-valued data, so long as the indexed data is all points; the behavior is undefined otherwise. However, it will likely be removed in the future in lieu of using another strategy with a more scalable implementation. Use of this call is the only circumstance in which a cache is used. The cache is simple but as such it doesn't scale to large numbers of points nor is it real-time-search friendly.

    Implementation:

    The SpatialPrefixTree does most of the work, for example returning a list of terms representing grids of various sizes for a supplied shape. An important configuration item is setDistErrPct(double) which balances shape precision against scalability. See those javadocs.