Class PointType

All Implemented Interfaces:
SchemaAware, SpatialQueryable

public class PointType extends CoordinateFieldType implements SpatialQueryable
A point type that indexes a point in an n-dimensional space as separate fields and supports range queries. See LatLonPointSpatialField for geo-spatial queries.
  • Constructor Details

    • PointType

      public PointType()
  • Method Details

    • 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 AbstractSubTypeFieldType
    • isPolyField

      public 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) 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) method may return more than one field
    • createFields

      public List<org.apache.lucene.index.IndexableField> createFields(SchemaField field, Object value)
      Description copied from class: FieldType
      Given a SchemaField, create one or more IndexableField instances
      Overrides:
      createFields in class FieldType
      Parameters:
      field - the SchemaField
      value - The value to add to the field
      Returns:
      An array of IndexableField
      See Also:
    • getValueSource

      public org.apache.lucene.queries.function.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
    • createField

      public org.apache.lucene.index.IndexableField createField(SchemaField field, Object value)
      It never makes sense to create a single field, so make it impossible to happen by throwing UnsupportedOperationException
      Overrides:
      createField in class FieldType
      See Also:
    • write

      public void write(TextResponseWriter writer, String name, org.apache.lucene.index.IndexableField f) throws IOException
      Description copied from class: FieldType
      calls back to TextResponseWriter to write the field value

      Sub-classes should prefer using FieldType.toExternal(IndexableField) or FieldType.toObject(IndexableField) to get the writeable external value of f instead of directly using f.stringValue() or f.binaryValue()

      Specified by:
      write in class FieldType
      Throws:
      IOException
    • getSortField

      public org.apache.lucene.search.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:
    • getUninversionType

      public UninvertingReader.Type getUninversionType(SchemaField sf)
      Description copied from class: FieldType
      If 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.

      This method will not be used if the field is (effectively) uninvertible="false"

      Specified by:
      getUninversionType in class FieldType
      Parameters:
      sf - field instance
      Returns:
      type to uninvert, or null (to disallow uninversion for the field)
      See Also:
    • getSpecializedRangeQuery

      protected org.apache.lucene.search.Query getSpecializedRangeQuery(QParser parser, SchemaField field, String part1, String part2, boolean minInclusive, boolean maxInclusive)
      Care should be taken in calling this with higher order dimensions for performance reasons.
      Overrides:
      getSpecializedRangeQuery 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
    • getFieldQuery

      public org.apache.lucene.search.Query getFieldQuery(QParser parser, SchemaField field, String externalVal)
      Description copied from class: AbstractSubTypeFieldType
      Throws UnsupportedOperationException()
      Overrides:
      getFieldQuery in class AbstractSubTypeFieldType
      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
    • checkSupportsDocValues

      protected void checkSupportsDocValues()
      Description copied from class: FieldType
      Called by FieldType.checkSchemaField(SchemaField) if the field has docValues. By default none do.
      Overrides:
      checkSupportsDocValues in class FieldType
    • createSpatialQuery

      public org.apache.lucene.search.Query createSpatialQuery(QParser parser, SpatialOptions options)
      Calculates the range and creates a RangeQuery (bounding box) wrapped in a BooleanQuery (unless the dimension is 1, one range for every dimension, AND'd together by a Boolean
      Specified by:
      createSpatialQuery in interface SpatialQueryable
      Parameters:
      parser - The parser
      options - The SpatialOptions for this filter.
      Returns:
      The Query representing the bounding box around the point.
    • vectorBoxCorner

      public static double[] vectorBoxCorner(double[] center, double[] result, double distance, boolean upperRight)
      Return the coordinates of a vector that is the corner of a box (upper right or lower left), assuming a Rectangular coordinate system. Note, this does not apply for points on a sphere or ellipse (although it could be used as an approximation).
      Parameters:
      center - The center point
      result - Holds the result, potentially resizing if needed.
      distance - The d from the center to the corner
      upperRight - If true, return the coords for the upper right corner, else return the lower left.
      Returns:
      The point, either the upperLeft or the lower right
    • parseCommaSeparatedList

      public static String[] parseCommaSeparatedList(String externalVal, int dimension) throws org.apache.solr.common.SolrException
      Given a string containing dimension values encoded in it, separated by commas, return a String array of length dimension containing the values.
      Parameters:
      externalVal - The value to parse
      dimension - The expected number of values for the point
      Returns:
      An array of the values that make up the point (aka vector)
      Throws:
      org.apache.solr.common.SolrException - if the dimension specified does not match the number found
    • getSphereRadius

      public double getSphereRadius()
      Specified by:
      getSphereRadius in interface SpatialQueryable