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. SeeLatLonPointSpatialField
for geo-spatial queries.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.solr.schema.FieldType
FieldType.DefaultAnalyzer, FieldType.MultiValueSelector
-
-
Field Summary
-
Fields inherited from class org.apache.solr.schema.CoordinateFieldType
DEFAULT_DIMENSION, dimension, DIMENSION
-
Fields inherited from class org.apache.solr.schema.AbstractSubTypeFieldType
dynFieldProps, schema, SUB_FIELD_SUFFIX, SUB_FIELD_TYPE, subFieldType, subSuffix, subType, suffix, suffixes
-
Fields inherited from class org.apache.solr.schema.FieldType
ANALYZER, args, AUTO_GENERATE_PHRASE_QUERIES, CHAR_FILTER, CHAR_FILTERS, CLASS_NAME, docValuesFormat, ENABLE_GRAPH_QUERIES, falseProperties, FILTER, FILTERS, INDEX, INDEX_ANALYZER, MULTI_TERM, MULTI_TERM_ANALYZER, POLY_FIELD_SEPARATOR, postingsFormat, properties, QUERY, QUERY_ANALYZER, similarity, SIMILARITY, similarityFactory, SYNONYM_QUERY_STYLE, TOKENIZER, trueProperties, TYPE, TYPE_NAME, typeName
-
Fields inherited from class org.apache.solr.schema.FieldProperties
BINARY, DOC_VALUES, INDEXED, LARGE_FIELD, 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, UNINVERTIBLE, USE_DOCVALUES_AS_STORED
-
-
Constructor Summary
Constructors Constructor Description PointType()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
checkSupportsDocValues()
Called byFieldType.checkSchemaField(SchemaField)
if the field has docValues.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 UnsupportedOperationExceptionList<org.apache.lucene.index.IndexableField>
createFields(SchemaField field, Object value)
Given aSchemaField
, create one or moreIndexableField
instancesorg.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 Booleanorg.apache.lucene.search.Query
getFieldQuery(QParser parser, SchemaField field, String externalVal)
Throws UnsupportedOperationException()org.apache.lucene.search.SortField
getSortField(SchemaField field, boolean top)
Returns the SortField instance that should be used to sort fields of this type.protected org.apache.lucene.search.Query
getSpecializedRangeQuery(QParser parser, SchemaField field, String part1, String part2, boolean minInclusive, boolean maxInclusive)
Returns a Query instance for doing range searches on this field type.double
getSphereRadius()
UninvertingReader.Type
getUninversionType(SchemaField sf)
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.org.apache.lucene.queries.function.ValueSource
getValueSource(SchemaField field, QParser parser)
called to get the default value source (normally, from the Lucene FieldCache.)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 theFieldType.createFields(org.apache.solr.schema.SchemaField, Object)
method.static String[]
parseCommaSeparatedList(String externalVal, int dimension)
Given a string containing dimension values encoded in it, separated by commas, return a String array of length dimension containing the values.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.void
write(TextResponseWriter writer, String name, org.apache.lucene.index.IndexableField f)
calls back to TextResponseWriter to write the field value-
Methods inherited from class org.apache.solr.schema.CoordinateFieldType
getDimension
-
Methods inherited from class org.apache.solr.schema.AbstractSubTypeFieldType
createSuffixCache, getSubType, inform, subField
-
Methods inherited from class org.apache.solr.schema.FieldType
checkSchemaField, createField, getAnalyzerProperties, getClassArg, getDefaultMultiValueSelectorForSort, getDocValuesFormat, getExistenceQuery, getFieldTermQuery, getIndexAnalyzer, getNamedPropertyValues, getNonFieldPropertyArgs, getNumberType, getNumericSort, getPostingsFormat, getPrefixQuery, getQueryAnalyzer, getRangeQuery, getRewriteMethod, getSetQuery, getSimilarity, getSimilarityFactory, getSingleValueSource, getSortedNumericSortField, getSortedSetSortField, getSortField, getSpecializedExistenceQuery, getStringSort, getTypeName, hasProperty, indexedToReadable, indexedToReadable, isExplicitAnalyzer, isExplicitQueryAnalyzer, isMultiValued, isPointField, isTokenized, isUtf8Field, marshalBase64SortValue, marshalSortValue, marshalStringSortValue, multiValuedFieldCache, readableToIndexed, readableToIndexed, restrictProps, setArgs, setIndexAnalyzer, setIsExplicitAnalyzer, setIsExplicitQueryAnalyzer, setQueryAnalyzer, setSimilarity, storedToIndexed, storedToReadable, supportsAnalyzers, toExternal, toInternal, toNativeType, toObject, toObject, toString, treatUnboundedRangeAsExistence, unmarshalBase64SortValue, unmarshalSortValue, unmarshalStringSortValue, useDocValuesAsStored, write
-
-
-
-
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 classAbstractSubTypeFieldType
-
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 theFieldType.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 classFieldType
- 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 aSchemaField
, create one or moreIndexableField
instances- Overrides:
createFields
in classFieldType
- Parameters:
field
- theSchemaField
value
- The value to add to the field- Returns:
- An array of
IndexableField
- See Also:
FieldType.createField(SchemaField, Object)
,FieldType.isPolyField()
-
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 classFieldType
-
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 classFieldType
- See Also:
FieldType.toInternal(java.lang.String)
-
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 valueSub-classes should prefer using
FieldType.toExternal(IndexableField)
orFieldType.toObject(IndexableField)
to get the writeable external value off
instead of directly usingf.stringValue()
orf.binaryValue()
- Specified by:
write
in classFieldType
- 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.
-
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 classFieldType
- Parameters:
sf
- field instance- Returns:
- type to uninvert, or
null
(to disallow uninversion for the field) - See Also:
SchemaField.isUninvertible()
-
getSpecializedRangeQuery
protected org.apache.lucene.search.Query getSpecializedRangeQuery(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 passespart1
andpart2
as null if they are '*' respectively.minInclusive
andmaxInclusive
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/orpart2
as well as unequalminInclusive
andmaxInclusive
parameters gracefully.This method does not, and should not, check for or handle existence queries, please look at
FieldType.getRangeQuery(org.apache.solr.search.QParser, org.apache.solr.schema.SchemaField, java.lang.String, java.lang.String, boolean, boolean)
for that logic.- Overrides:
getSpecializedRangeQuery
in classFieldType
- Parameters:
parser
- theQParser
calling the methodfield
- the schema fieldpart1
- the lower boundary of the range, nulls are allowed.part2
- the upper boundary of the range, nulls are allowedminInclusive
- whether the minimum of the range is inclusive or notmaxInclusive
- 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 classAbstractSubTypeFieldType
- Parameters:
parser
- TheQParser
calling the methodfield
- TheSchemaField
of the field to searchexternalVal
- The String representation of the value to search- Returns:
- The
Query
instance. This implementation returns aTermQuery
but overriding queries may not
-
checkSupportsDocValues
protected void checkSupportsDocValues()
Description copied from class:FieldType
Called byFieldType.checkSchemaField(SchemaField)
if the field has docValues. By default none do.- Overrides:
checkSupportsDocValues
in classFieldType
-
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 interfaceSpatialQueryable
- Parameters:
parser
- The parseroptions
- TheSpatialOptions
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 pointresult
- Holds the result, potentially resizing if needed.distance
- The d from the center to the cornerupperRight
- 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 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 parsedimension
- The expected number of values for the point- Returns:
- An array of the values that make up the point (aka vector)
- Throws:
SolrException
- if the dimension specified does not match the number found
-
getSphereRadius
public double getSphereRadius()
- Specified by:
getSphereRadius
in interfaceSpatialQueryable
-
-