Package 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 | Description
    --- | ---
    `CompositeSpatialStrategy​(String fieldName, RecursivePrefixTreeStrategy indexStrategy, SerializedDVStrategy geometryStrategy)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `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`