org.apache.solr.schema

## Class AbstractSpatialFieldType<T extends SpatialStrategy>

- java.lang.Object
- - org.apache.solr.schema.FieldProperties
  - - org.apache.solr.schema.FieldType
    - - org.apache.solr.schema.AbstractSpatialFieldType<T>

- All Implemented Interfaces:
    SpatialQueryable
  Direct Known Subclasses:
    AbstractSpatialPrefixTreeFieldType, BBoxField, RptWithGeometrySpatialField, SpatialPointVectorFieldType

      public abstract class AbstractSpatialFieldType<T extends SpatialStrategy>
      extends FieldType
      implements SpatialQueryable

  Abstract base class for Solr FieldTypes based on a Lucene 4 `SpatialStrategy`.
  WARNING: This API is experimental and might change in incompatible ways in the next release.

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.apache.solr.schema.FieldType

      `FieldType.DefaultAnalyzer, FieldType.MultiValueSelector`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected SpatialArgsParser` | `argsParser`
    `protected org.locationtech.spatial4j.context.SpatialContext` | `ctx`
    `static String` | `DISTANCE`
    `protected DistanceUnits` | `distanceUnits`
    `static String` | `FILTER_PARAM` A local-param boolean that can be set to false to only return the FunctionQuery (score), and thus not do filtering.
    `static String` | `FORMAT` Optional param to pick the string conversion
    `static String` | `NONE`
    `static String` | `RECIP_DISTANCE`
    `static String` | `SCORE_PARAM` A local-param with one of "none" (default), "distance", "recipDistance" or supported values in (`DistanceUnits.getSupportedUnits()`.
    `protected org.locationtech.spatial4j.io.ShapeReader` | `shapeReader`
    `protected org.locationtech.spatial4j.io.ShapeWriter` | `shapeWriter`
    `protected Set<String>` | `supportedScoreModes`

    - ### Fields inherited from class org.apache.solr.schema.FieldType

      `ANALYZER, args, CHAR_FILTER, CHAR_FILTERS, CLASS_NAME, docValuesFormat, falseProperties, FILTER, FILTERS, INDEX, INDEX_ANALYZER, MULTI_TERM, MULTI_TERM_ANALYZER, POLY_FIELD_SEPARATOR, postingsFormat, properties, QUERY, QUERY_ANALYZER, similarity, SIMILARITY, similarityFactory, TOKENIZER, trueProperties, TYPE, TYPE_NAME, typeName`

    - ### Fields inherited from class org.apache.solr.schema.FieldProperties

      `BINARY, DOC_VALUES, INDEXED, MULTIVALUED, OMIT_NORMS, OMIT_POSITIONS, OMIT_TF_POSITIONS, REQUIRED, SORT_MISSING_FIRST, SORT_MISSING_LAST, STORE_OFFSETS, STORE_TERMOFFSETS, STORE_TERMPAYLOADS, STORE_TERMPOSITIONS, STORE_TERMVECTORS, STORED, TOKENIZED, USE_DOCVALUES_AS_STORED`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `AbstractSpatialFieldType()`
    `protected` | `AbstractSpatialFieldType(Set<String> moreScoreModes)`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `Field` | `createField(SchemaField field, Object val, float boost)` Used for adding a document when a field needs to be created from a type and a string.
    `List<IndexableField>` | `createFields(SchemaField field, Object val, float boost)` Given a `SchemaField`, create one or more `IndexableField` instances
    `Query` | `createSpatialQuery(QParser parser, SpatialOptions options)` Implemented for compatibility with geofilt & bbox query parsers: `SpatialQueryable`.
    `DistanceUnits` | `getDistanceUnits()`
    `Query` | `getFieldQuery(QParser parser, SchemaField field, String externalVal)` Returns a Query instance for doing searches against a field.
    `protected Query` | `getQueryFromSpatialArgs(QParser parser, SchemaField field, SpatialArgs spatialArgs)`
    `Query` | `getRangeQuery(QParser parser, SchemaField field, String part1, String part2, boolean minInclusive, boolean maxInclusive)` Returns a Query instance for doing range searches on this field type.
    `SortField` | `getSortField(SchemaField field, boolean top)` Returns the SortField instance that should be used to sort fields of this type.
    `org.locationtech.spatial4j.context.SpatialContext` | `getSpatialContext()`
    `double` | `getSphereRadius()`
    `protected String` | `getStoredValue(org.locationtech.spatial4j.shape.Shape shape, String shapeStr)` Called by `createFields(SchemaField, Object, float)` to get the stored value.
    `T` | `getStrategy(String fieldName)` Gets the cached strategy for this field, creating it if necessary via `newSpatialStrategy(String)`.
    `Set<String>` | `getSupportedScoreModes()` The set of values supported for the score local-param.
    `UninvertingReader.Type` | `getUninversionType(SchemaField sf)` DocValues is not enabled for a field, but it's indexed, docvalues can be constructed on the fly (uninverted, aka fieldcache) on the first request to sort, facet, etc.
    `ValueSource` | `getValueSource(SchemaField field, QParser parser)` called to get the default value source (normally, from the Lucene FieldCache.)
    `protected ValueSource` | `getValueSourceFromSpatialArgs(QParser parser, SchemaField field, SpatialArgs spatialArgs, String score, T strategy)`
    `protected void` | `init(IndexSchema schema, Map<String,String> args)` subclasses should initialize themselves with the args provided and remove valid arguments.
    `boolean` | `isPolyField()` A "polyField" is a FieldType that can produce more than one IndexableField instance for a single value, via the `FieldType.createFields(org.apache.solr.schema.SchemaField, Object, float)` method.
    `protected SpatialArgsParser` | `newSpatialArgsParser()`
    `protected abstract T` | `newSpatialStrategy(String fieldName)` Called from `getStrategy(String)` upon first use by fieldName.
    `DistanceUnits` | `parseDistanceUnits(String str)` if `str` is non-null, returns `DistanceUnits.valueOf(String)` (which will return null if not found), else returns `distanceUnits` (only null before initialized in `init()`.
    `org.locationtech.spatial4j.shape.Shape` | `parseShape(String str)` Create a `Shape` from the input string
    `protected SpatialArgs` | `parseSpatialArgs(QParser parser, String externalVal)`
    `String` | `shapeToString(org.locationtech.spatial4j.shape.Shape shape)` Returns a String version of a shape to be used for the stored value.
    `void` | `write(TextResponseWriter writer, String name, IndexableField f)` calls back to TextResponseWriter to write the field value

    - ### Methods inherited from class org.apache.solr.schema.FieldType

      `checkSchemaField, createField, getAnalyzerProperties, getClassArg, getDocValuesFormat, getIndexAnalyzer, getIndexOptions, getNamedPropertyValues, getNonFieldPropertyArgs, getNumericType, getPostingsFormat, getPrefixQuery, getQueryAnalyzer, getRewriteMethod, getSimilarity, getSimilarityFactory, getSingleValueSource, getStringSort, getTypeName, hasProperty, indexedToReadable, indexedToReadable, isExplicitAnalyzer, isExplicitQueryAnalyzer, isMultiValued, isTokenized, marshalBase64SortValue, marshalSortValue, marshalStringSortValue, multiValuedFieldCache, readableToIndexed, readableToIndexed, restrictProps, setArgs, setIndexAnalyzer, setIsExplicitAnalyzer, setIsExplicitQueryAnalyzer, setQueryAnalyzer, setSimilarity, storedToIndexed, storedToReadable, supportsAnalyzers, toExternal, toInternal, toNativeType, toObject, toObject, toString, unmarshalBase64SortValue, unmarshalSortValue, unmarshalStringSortValue, useDocValuesAsStored`

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

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

- - ### Field Detail

    - #### SCORE_PARAM

          public static final String SCORE_PARAM

      A local-param with one of "none" (default), "distance", "recipDistance" or supported values in (`DistanceUnits.getSupportedUnits()`.
      See Also:
        Constant Field Values

    - #### FILTER_PARAM

          public static final String FILTER_PARAM

      A local-param boolean that can be set to false to only return the FunctionQuery (score), and thus not do filtering.
      See Also:
        Constant Field Values

    - #### DISTANCE

          public static final String DISTANCE

      See Also:
        Constant Field Values

    - #### RECIP_DISTANCE

          public static final String RECIP_DISTANCE

      See Also:
        Constant Field Values

    - #### NONE

          public static final String NONE

      See Also:
        Constant Field Values

    - #### FORMAT

          public static final String FORMAT

      Optional param to pick the string conversion
      See Also:
        Constant Field Values

    - #### ctx

          protected org.locationtech.spatial4j.context.SpatialContext ctx

    - #### argsParser

          protected SpatialArgsParser argsParser

    - #### shapeWriter

          protected org.locationtech.spatial4j.io.ShapeWriter shapeWriter

    - #### shapeReader

          protected org.locationtech.spatial4j.io.ShapeReader shapeReader

    - #### distanceUnits

          protected DistanceUnits distanceUnits

    - #### supportedScoreModes

          protected final Set<String> supportedScoreModes

  - ### Constructor Detail

    - #### AbstractSpatialFieldType

          protected AbstractSpatialFieldType()

    - #### AbstractSpatialFieldType

          protected AbstractSpatialFieldType(Set<String> moreScoreModes)

  - ### Method Detail

    - #### init

          protected void init(IndexSchema schema,
                              Map<String,String> args)

      Description copied from class: `FieldType`
      subclasses should initialize themselves with the args provided and remove valid arguments. leftover arguments will cause an exception. Common boolean properties have already been handled.
      Overrides:
        `init` in class `FieldType`

    - #### parseDistanceUnits

          public DistanceUnits parseDistanceUnits(String str)

      if `str` is non-null, returns `DistanceUnits.valueOf(String)` (which will return null if not found), else returns `distanceUnits` (only null before initialized in `init()`.
      Parameters:
        `str` - maybe null
      Returns:
        maybe null

    - #### newSpatialArgsParser

          protected SpatialArgsParser newSpatialArgsParser()

    - #### createField

          public final Field createField(SchemaField field,
                                         Object val,
                                         float boost)

      Description copied from class: `FieldType`
      Used for adding a document when a field needs to be created from a type and a string.

      By default, the indexed value is the same as the stored value (taken from toInternal()). Having a different representation for external, internal, and indexed would present quite a few problems given the current Lucene architecture. An analyzer for adding docs would need to translate internal->indexed while an analyzer for querying would need to translate external->indexed.

      The only other alternative to having internal==indexed would be to have internal==external. In this case, toInternal should convert to the indexed representation, toExternal() should do nothing, and createField() should *not* call toInternal, but use the external value and set tokenized=true to get Lucene to convert to the internal(indexed) form.

      :TODO: clean up and clarify this explanation.
      Overrides:
        `createField` in class `FieldType`
      See Also:
        `FieldType.toInternal(java.lang.String)`

    - #### getUninversionType

          public UninvertingReader.Type getUninversionType(SchemaField sf)

      Description copied from class: `FieldType`
      DocValues is not enabled for a field, but it's indexed, docvalues can be constructed on the fly (uninverted, aka fieldcache) on the first request to sort, facet, etc. This specifies the structure to use.
      Specified by:
        `getUninversionType` in class `FieldType`
      Parameters:
        `sf` - field instance
      Returns:
        type to uninvert, or `null` (to disallow uninversion for the field)

    - #### createFields

          public List<IndexableField> createFields(SchemaField field,
                                                   Object val,
                                                   float boost)

      Description copied from class: `FieldType`
      Given a `SchemaField`, create one or more `IndexableField` instances
      Overrides:
        `createFields` in class `FieldType`
      Parameters:
        `field` - the `SchemaField`
        `val` - The value to add to the field
        `boost` - The boost to apply
      Returns:
        An array of `IndexableField`
      See Also:
        `FieldType.createField(SchemaField, Object, float)`, `FieldType.isPolyField()`

    - #### getStoredValue

          protected String getStoredValue(org.locationtech.spatial4j.shape.Shape shape,
                                          String shapeStr)

      Called by `createFields(SchemaField, Object, float)` to get the stored value.

    - #### parseShape

          public org.locationtech.spatial4j.shape.Shape parseShape(String str)

      Create a `Shape` from the input string

    - #### shapeToString

          public String shapeToString(org.locationtech.spatial4j.shape.Shape shape)

      Returns a String version of a shape to be used for the stored value. The format can be selected using the initParam `format={WKT|GeoJSON}`

    - #### newSpatialStrategy

          protected abstract T newSpatialStrategy(String fieldName)

      Called from `getStrategy(String)` upon first use by fieldName. }

    - #### isPolyField

          public final boolean isPolyField()

      Description copied from class: `FieldType`
      A "polyField" is a FieldType that can produce more than one IndexableField instance for a single value, via the `FieldType.createFields(org.apache.solr.schema.SchemaField, Object, float)` method. This is useful when hiding the implementation details of a field from the Solr end user. For instance, a spatial point may be represented by multiple different fields.
      Overrides:
        `isPolyField` in class `FieldType`
      Returns:
        true if the `FieldType.createFields(org.apache.solr.schema.SchemaField, Object, float)` method may return more than one field

    - #### createSpatialQuery

          public Query createSpatialQuery(QParser parser,
                                          SpatialOptions options)

      Implemented for compatibility with geofilt & bbox query parsers: `SpatialQueryable`.
      Specified by:
        `createSpatialQuery` in interface `SpatialQueryable`

    - #### getRangeQuery

          public Query getRangeQuery(QParser parser,
                                     SchemaField field,
                                     String part1,
                                     String part2,
                                     boolean minInclusive,
                                     boolean maxInclusive)

      Description copied from class: `FieldType`
      Returns a Query instance for doing range searches on this field type. `SolrQueryParser` currently passes part1 and part2 as null if they are '*' respectively. minInclusive and maxInclusive are both true currently by SolrQueryParser but that may change in the future. Also, other QueryParser implementations may have different semantics.

      Sub-classes should override this method to provide their own range query implementation. They should strive to handle nulls in part1 and/or part2 as well as unequal minInclusive and maxInclusive parameters gracefully.

      Overrides:
        `getRangeQuery` in class `FieldType`
      Parameters:
        `parser` - the `QParser` calling the method
        `field` - the schema field
        `part1` - the lower boundary of the range, nulls are allowed.
        `part2` - the upper boundary of the range, nulls are allowed
        `minInclusive` - whether the minimum of the range is inclusive or not
        `maxInclusive` - whether the maximum of the range is inclusive or not
      Returns:
        a Query instance to perform range search according to given parameters

    - #### getValueSource

          public ValueSource getValueSource(SchemaField field,
                                            QParser parser)

      Description copied from class: `FieldType`
      called to get the default value source (normally, from the Lucene FieldCache.)
      Overrides:
        `getValueSource` in class `FieldType`

    - #### getFieldQuery

          public Query getFieldQuery(QParser parser,
                                     SchemaField field,
                                     String externalVal)

      Description copied from class: `FieldType`
      Returns a Query instance for doing searches against a field.
      Overrides:
        `getFieldQuery` in class `FieldType`
      Parameters:
        `parser` - The `QParser` calling the method
        `field` - The `SchemaField` of the field to search
        `externalVal` - The String representation of the value to search
      Returns:
        The `Query` instance. This implementation returns a `TermQuery` but overriding queries may not

    - #### parseSpatialArgs

          protected SpatialArgs parseSpatialArgs(QParser parser,
                                                 String externalVal)

    - #### getQueryFromSpatialArgs

          protected Query getQueryFromSpatialArgs(QParser parser,
                                                  SchemaField field,
                                                  SpatialArgs spatialArgs)

    - #### getSphereRadius

          public double getSphereRadius()

      Specified by:
        `getSphereRadius` in interface `SpatialQueryable`

    - #### getSupportedScoreModes

          public Set<String> getSupportedScoreModes()

      The set of values supported for the score local-param. Not null.

    - #### getValueSourceFromSpatialArgs

          protected ValueSource getValueSourceFromSpatialArgs(QParser parser,
                                                              SchemaField field,
                                                              SpatialArgs spatialArgs,
                                                              String score,
                                                              T strategy)

    - #### getStrategy

          public T getStrategy(String fieldName)

      Gets the cached strategy for this field, creating it if necessary via `newSpatialStrategy(String)`.
      Parameters:
        `fieldName` - Mandatory reference to the field name
      Returns:
        Non-null.

    - #### getSpatialContext

          public org.locationtech.spatial4j.context.SpatialContext getSpatialContext()

      Returns:
        The Spatial Context for this field type

    - #### write

          public void write(TextResponseWriter writer,
                            String name,
                            IndexableField f)
                     throws IOException

      Description copied from class: `FieldType`
      calls back to TextResponseWriter to write the field value
      Specified by:
        `write` in class `FieldType`
      Throws:
        `IOException`

    - #### getSortField

          public SortField getSortField(SchemaField field,
                                        boolean top)

      Description copied from class: `FieldType`
      Returns the SortField instance that should be used to sort fields of this type.
      Specified by:
        `getSortField` in class `FieldType`
      See Also:
        `SchemaField.checkSortability()`

    - #### getDistanceUnits

          public DistanceUnits getDistanceUnits()

Copyright © 2000-2016 Apache Software Foundation. All Rights Reserved.