org.apache.lucene.spatial.composite

## Class CompositeSpatialStrategy

- java.lang.Object
- - org.apache.lucene.spatial.SpatialStrategy
  - - org.apache.lucene.spatial.composite.CompositeSpatialStrategy

    public class CompositeSpatialStrategy
    extends SpatialStrategy

A composite `SpatialStrategy` based on `RecursivePrefixTreeStrategy` (RPT) and `SerializedDVStrategy` (SDV). RPT acts as an index to the precision available in SDV, and in some circumstances can avoid geometry lookups based on where a cell is in relation to the query shape. Currently the only predicate optimized like this is Intersects. All predicates are supported except for the BBox* ones, and Disjoint.

WARNING: This API is experimental and might change in incompatible ways in the next release.

### Field Summary

### Fields inherited from class org.apache.lucene.spatial.SpatialStrategy

`ctx`

### Constructor Summary

Constructors
Constructor and Description
`CompositeSpatialStrategy(String fieldName, RecursivePrefixTreeStrategy indexStrategy, SerializedDVStrategy geometryStrategy)`

### Method Summary

All Methods Instance Methods Concrete Methods
`Field[]` `createIndexableFields(org.locationtech.spatial4j.shape.Shape shape)` Returns the IndexableField(s) from the `shape` that are to be added to the `Document`.
`SerializedDVStrategy` `getGeometryStrategy()`
`RecursivePrefixTreeStrategy` `getIndexStrategy()`
`boolean` `isOptimizePredicates()`
`DoubleValuesSource` `makeDistanceValueSource(org.locationtech.spatial4j.shape.Point queryPoint, double multiplier)` Make a ValueSource returning the distance between the center of the indexed shape and `queryPoint`.
`Query` `makeQuery(SpatialArgs args)` Make a Query based principally on `SpatialOperation` and `Shape` from the supplied `args`.
`void` `setOptimizePredicates(boolean optimizePredicates)` Set to false to NOT use optimized search predicates that avoid checking the geometry sometimes.

### Methods inherited from class org.apache.lucene.spatial.SpatialStrategy

`getFieldName, getSpatialContext, makeDistanceValueSource, makeRecipDistanceValueSource, toString`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Constructor Detail

#### CompositeSpatialStrategy

    public CompositeSpatialStrategy(String fieldName,
                                    RecursivePrefixTreeStrategy indexStrategy,
                                    SerializedDVStrategy geometryStrategy)

### Method Detail

#### getIndexStrategy

    public RecursivePrefixTreeStrategy getIndexStrategy()

#### getGeometryStrategy

    public SerializedDVStrategy getGeometryStrategy()

#### isOptimizePredicates

    public boolean isOptimizePredicates()

#### setOptimizePredicates

    public void setOptimizePredicates(boolean optimizePredicates)

Set to false to NOT use optimized search predicates that avoid checking the geometry sometimes. Only useful for benchmarking.

#### createIndexableFields

    public Field[] createIndexableFields(org.locationtech.spatial4j.shape.Shape shape)

Description copied from class: `SpatialStrategy`
Returns the IndexableField(s) from the `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.

Specified by:
  `createIndexableFields` in class `SpatialStrategy`
Returns:
  Not null nor will it have null elements.

#### 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 and `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.

Specified by:
  `makeDistanceValueSource` in class `SpatialStrategy`

#### makeQuery

    public Query makeQuery(SpatialArgs args)

Description copied from class: `SpatialStrategy`
Make a Query based principally on `SpatialOperation` and `Shape` from the supplied `args`. It should be constant scoring of 1.

Specified by:
  `makeQuery` in class `SpatialStrategy`