org.apache.solr.schema
Class AbstractSpatialFieldType<T extends SpatialStrategy>

java.lang.Object
  extended by org.apache.solr.schema.FieldProperties
      extended by org.apache.solr.schema.FieldType
          extended by org.apache.solr.schema.AbstractSpatialFieldType<T>
All Implemented Interfaces:
SpatialQueryable
Direct Known Subclasses:
AbstractSpatialPrefixTreeFieldType, 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
 
Field Summary
protected  SpatialArgsParser argsParser
           
protected  com.spatial4j.core.context.SpatialContext ctx
           
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.
protected  org.slf4j.Logger log
           
static String SCORE_PARAM
          A local-param with one of "none" (default), "distance", or "recipDistance".
 
Fields inherited from class org.apache.solr.schema.FieldType
analyzer, 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, queryAnalyzer, 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_TERMPOSITIONS, STORE_TERMVECTORS, STORED, TOKENIZED
 
Constructor Summary
AbstractSpatialFieldType()
           
 
Method Summary
 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 Solr 3 spatial geofilt & bbox query parsers: SpatialQueryable.
 Query getFieldQuery(QParser parser, SchemaField field, String externalVal)
          Returns a Query instance for doing searches against a field.
 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.
 T getStrategy(String fieldName)
          Gets the cached strategy for this field, creating it if necessary via newSpatialStrategy(String).
 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 the FieldType.createFields(org.apache.solr.schema.SchemaField, Object, float) method.
protected abstract  T newSpatialStrategy(String fieldName)
          Called from getStrategy(String) upon first use by fieldName.
protected  com.spatial4j.core.shape.Shape parseShape(String shapeStr)
           
protected  SpatialArgs parseSpatialArgs(String externalVal)
           
protected  String shapeToString(com.spatial4j.core.shape.Shape shape)
           
 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, getAnalyzer, getAnalyzerProperties, getClassArg, getDocValuesFormat, getIndexOptions, getNamedPropertyValues, getNonFieldPropertyArgs, getNumericType, getPostingsFormat, getQueryAnalyzer, getRewriteMethod, getSimilarity, getSimilarityFactory, getStringSort, getTypeName, hasProperty, indexedToReadable, indexedToReadable, isExplicitAnalyzer, isExplicitQueryAnalyzer, isMultiValued, isTokenized, multiValuedFieldCache, readableToIndexed, readableToIndexed, restrictProps, setAnalyzer, setArgs, setIsExplicitAnalyzer, setIsExplicitQueryAnalyzer, setQueryAnalyzer, setSimilarity, storedToIndexed, storedToReadable, toExternal, toInternal, toObject, toObject, toString
 
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", or "recipDistance".

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

log

protected final org.slf4j.Logger log

ctx

protected com.spatial4j.core.context.SpatialContext ctx

argsParser

protected SpatialArgsParser argsParser
Constructor Detail

AbstractSpatialFieldType

public AbstractSpatialFieldType()
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

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)

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()

parseShape

protected com.spatial4j.core.shape.Shape parseShape(String shapeStr)

shapeToString

protected String shapeToString(com.spatial4j.core.shape.Shape shape)

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 Solr 3 spatial 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(String externalVal)

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.

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()


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