Class FieldType
- java.lang.Object
-
- org.apache.solr.schema.FieldProperties
-
- org.apache.solr.schema.FieldType
-
- Direct Known Subclasses:
AbstractSpatialFieldType
,AbstractSubTypeFieldType
,BinaryField
,CollationField
,CurrencyFieldType
,ExternalFileField
,PrimitiveFieldType
,RandomSortField
,RankField
,TextField
public abstract class FieldType extends FieldProperties
Base class for all field types used by an index schema.- Since:
- 3.1
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
FieldType.DefaultAnalyzer
Default analyzer for types that only produce 1 verbatim token...static class
FieldType.MultiValueSelector
An enumeration representing various options that may exist for selecting a single value from a multivalued field.
-
Field Summary
Fields Modifier and Type Field Description static String
ANALYZER
protected Map<String,String>
args
additional arguments specified in the field type declarationprotected static String
AUTO_GENERATE_PHRASE_QUERIES
static String
CHAR_FILTER
static String
CHAR_FILTERS
static String
CLASS_NAME
protected String
docValuesFormat
The docvalues format used for this field typeprotected static String
ENABLE_GRAPH_QUERIES
protected int
falseProperties
properties explicitly set to falsestatic String
FILTER
static String
FILTERS
static String
INDEX
static String
INDEX_ANALYZER
static String
MULTI_TERM
static String
MULTI_TERM_ANALYZER
static String
POLY_FIELD_SEPARATOR
The default poly field separator.protected String
postingsFormat
The postings format used for this field typeprotected int
properties
static String
QUERY
static String
QUERY_ANALYZER
protected org.apache.lucene.search.similarities.Similarity
similarity
static String
SIMILARITY
protected SimilarityFactory
similarityFactory
protected static String
SYNONYM_QUERY_STYLE
static String
TOKENIZER
protected int
trueProperties
properties explicitly set to truestatic String
TYPE
static String
TYPE_NAME
protected String
typeName
The name of the type (not the name of the field)-
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 FieldType()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
checkSchemaField(SchemaField field)
Check'sSchemaField
instances constructed using this field type to ensure that they are valid.protected void
checkSupportsDocValues()
Called bycheckSchemaField(SchemaField)
if the field has docValues.protected org.apache.lucene.index.IndexableField
createField(String name, String val, org.apache.lucene.index.IndexableFieldType type)
Create the field from native Lucene parts.org.apache.lucene.index.IndexableField
createField(SchemaField field, Object value)
Used for adding a document when a field needs to be created from a type and a string.List<org.apache.lucene.index.IndexableField>
createFields(SchemaField field, Object value)
Given aSchemaField
, create one or moreIndexableField
instancesprotected static org.apache.solr.common.util.SimpleOrderedMap<Object>
getAnalyzerProperties(org.apache.lucene.analysis.Analyzer analyzer)
Returns a description of the given analyzer, by either reporting the Analyzer class name (and optionally luceneMatchVersion) if it's not a TokenizerChain, or if it is, querying each analysis factory for its name and args.String
getClassArg()
FieldType.MultiValueSelector
getDefaultMultiValueSelectorForSort(SchemaField field, boolean reverse)
Method for indicating whichFieldType.MultiValueSelector
(if any) should be used when sorting on a multivalued field of this type for the specified direction (asc/desc).String
getDocValuesFormat()
org.apache.lucene.search.Query
getExistenceQuery(QParser parser, SchemaField field)
Returns a Query instance for doing existence searches for a field.org.apache.lucene.search.Query
getFieldQuery(QParser parser, SchemaField field, String externalVal)
Returns a Query instance for doing searches against a field.org.apache.lucene.search.Query
getFieldTermQuery(QParser parser, SchemaField field, String externalVal)
Returns a Query instance for doing a single term search against a field.org.apache.lucene.analysis.Analyzer
getIndexAnalyzer()
Returns the Analyzer to be used when indexing fields of this type.org.apache.solr.common.util.SimpleOrderedMap<Object>
getNamedPropertyValues(boolean showDefaults)
Get a map of property name -> value for this field type.protected Map<String,String>
getNonFieldPropertyArgs()
Returns args to this field type that aren't standard field propertiesNumberType
getNumberType()
Return the numeric type of this field, or null if this field is not a numeric field.protected org.apache.lucene.search.SortField
getNumericSort(SchemaField field, NumberType type, boolean reverse)
Utility usable by subclasses when they want to get basic Numeric sorting using common checks.String
getPostingsFormat()
org.apache.lucene.search.Query
getPrefixQuery(QParser parser, SchemaField sf, String termStr)
Returns a Query instance for doing prefix searches on this field type.org.apache.lucene.analysis.Analyzer
getQueryAnalyzer()
Returns the Analyzer to be used when searching fields of this type.org.apache.lucene.search.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.org.apache.lucene.search.MultiTermQuery.RewriteMethod
getRewriteMethod(QParser parser, SchemaField field)
Expert: Returns the rewrite method for multiterm queries such as wildcards.org.apache.lucene.search.Query
getSetQuery(QParser parser, SchemaField field, Collection<String> externalVals)
org.apache.lucene.search.similarities.Similarity
getSimilarity()
Gets the Similarity used when scoring fields of this typeSimilarityFactory
getSimilarityFactory()
Gets the factory for the Similarity used when scoring fields of this typeorg.apache.lucene.queries.function.ValueSource
getSingleValueSource(FieldType.MultiValueSelector choice, SchemaField field, QParser parser)
Method for dynamically building a ValueSource based on a single value of a multivalued field.protected static org.apache.lucene.search.SortField
getSortedNumericSortField(SchemaField field, org.apache.lucene.search.SortField.Type sortType, org.apache.lucene.search.SortedNumericSelector.Type selector, boolean reverse, Object missingLow, Object missingHigh)
Same asgetSortField(org.apache.solr.schema.SchemaField, boolean)
but usingSortedNumericSortField
.protected static org.apache.lucene.search.SortField
getSortedSetSortField(SchemaField field, org.apache.lucene.search.SortedSetSelector.Type selector, boolean reverse, Object missingLow, Object missingHigh)
Same asgetSortField(org.apache.solr.schema.SchemaField, boolean)
but usingSortedSetSortField
abstract 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 static org.apache.lucene.search.SortField
getSortField(SchemaField field, org.apache.lucene.search.SortField.Type sortType, boolean reverse, Object missingLow, Object missingHigh)
A Helper utility method for use by subclasses.protected org.apache.lucene.search.Query
getSpecializedExistenceQuery(QParser parser, SchemaField field)
Returns a Query instance for doing existence searches for a field without certain options, such as docValues or norms.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.protected org.apache.lucene.search.SortField
getStringSort(SchemaField field, boolean reverse)
Utility usable by subclasses when they want to get basic String sorting using common checks.String
getTypeName()
The Name of this FieldType as specified in the schema fileabstract 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 boolean
hasProperty(int p)
Check if a property is setString
indexedToReadable(String indexedForm)
Given an indexed term, return the human readable representationorg.apache.lucene.util.CharsRef
indexedToReadable(org.apache.lucene.util.BytesRef input, org.apache.lucene.util.CharsRefBuilder output)
Given an indexed term, append the human readable representationprotected void
init(IndexSchema schema, Map<String,String> args)
subclasses should initialize themselves with the args provided and remove valid arguments.boolean
isExplicitAnalyzer()
boolean
isExplicitQueryAnalyzer()
boolean
isMultiValued()
Returns true if fields can have multiple valuesboolean
isPointField()
boolean
isPolyField()
A "polyField" is a FieldType that can produce more than one IndexableField instance for a single value, via thecreateFields(org.apache.solr.schema.SchemaField, Object)
method.boolean
isTokenized()
Returns true if fields of this type should be tokenizedboolean
isUtf8Field()
protected static Object
marshalBase64SortValue(Object value)
Marshals a binary field value.Object
marshalSortValue(Object value)
Convert a value used by the FieldComparator for this FieldType's SortField into a marshalable value for distributed sorting.protected static Object
marshalStringSortValue(Object value)
Marshals a string-based field value.boolean
multiValuedFieldCache()
Returns true if a single field value of this type has multiple logical values for the purposes of faceting, sorting, etc.void
readableToIndexed(CharSequence val, org.apache.lucene.util.BytesRefBuilder result)
Given the readable value, return the term value that will match it.String
readableToIndexed(String val)
Given the readable value, return the term value that will match it.protected void
restrictProps(int props)
:TODO: document this methodprotected void
setArgs(IndexSchema schema, Map<String,String> args)
Initializes the field type.void
setIndexAnalyzer(org.apache.lucene.analysis.Analyzer analyzer)
Sets the Analyzer to be used when indexing fields of this type.void
setIsExplicitAnalyzer(boolean explicitAnalyzer)
void
setIsExplicitQueryAnalyzer(boolean isExplicitQueryAnalyzer)
void
setQueryAnalyzer(org.apache.lucene.analysis.Analyzer analyzer)
Sets the Analyzer to be used when querying fields of this type.void
setSimilarity(SimilarityFactory similarityFactory)
Sets the Similarity used when scoring fields of this typeString
storedToIndexed(org.apache.lucene.index.IndexableField f)
Given the stored field, return the indexed formString
storedToReadable(org.apache.lucene.index.IndexableField f)
Given the stored field, return the human readable representationprotected boolean
supportsAnalyzers()
Returns true if this type supports index and query analyzers, false otherwise.String
toExternal(org.apache.lucene.index.IndexableField f)
Convert the stored-field format to an external (string, human readable) valueString
toInternal(String val)
Convert an external value (from XML update command or from query string) into the internal format for both storing and indexing (which can be modified by any analyzers).Object
toNativeType(Object val)
Converts any Object to a java Object native to this field typeObject
toObject(org.apache.lucene.index.IndexableField f)
Convert the stored-field format to an external object.Object
toObject(SchemaField sf, org.apache.lucene.util.BytesRef term)
String
toString()
protected boolean
treatUnboundedRangeAsExistence(SchemaField field)
Returns whether an unbounded range query should be treated the same as an existence query for the given field type.protected static Object
unmarshalBase64SortValue(Object value)
Unmarshals a binary field value.Object
unmarshalSortValue(Object value)
Convert a value marshaled viamarshalSortValue(java.lang.Object)
back into a value usable by the FieldComparator for this FieldType's SortFieldprotected static Object
unmarshalStringSortValue(Object value)
Unmarshals a string-based field value.boolean
useDocValuesAsStored()
Returns true if the fields' docValues should be used for obtaining stored valueboolean
write(org.apache.solr.common.IteratorWriter.ItemWriter itemWriter)
abstract void
write(TextResponseWriter writer, String name, org.apache.lucene.index.IndexableField f)
calls back to TextResponseWriter to write the field value
-
-
-
Field Detail
-
POLY_FIELD_SEPARATOR
public static final String POLY_FIELD_SEPARATOR
The default poly field separator.
-
typeName
protected String typeName
The name of the type (not the name of the field)
-
args
protected Map<String,String> args
additional arguments specified in the field type declaration
-
trueProperties
protected int trueProperties
properties explicitly set to true
-
falseProperties
protected int falseProperties
properties explicitly set to false
-
properties
protected int properties
-
similarityFactory
protected SimilarityFactory similarityFactory
- NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
-
similarity
protected org.apache.lucene.search.similarities.Similarity similarity
- NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
-
postingsFormat
protected String postingsFormat
The postings format used for this field type
-
docValuesFormat
protected String docValuesFormat
The docvalues format used for this field type
-
TYPE
public static final String TYPE
- See Also:
- Constant Field Values
-
TYPE_NAME
public static final String TYPE_NAME
- See Also:
- Constant Field Values
-
CLASS_NAME
public static final String CLASS_NAME
- See Also:
- Constant Field Values
-
ANALYZER
public static final String ANALYZER
- See Also:
- Constant Field Values
-
INDEX
public static final String INDEX
- See Also:
- Constant Field Values
-
INDEX_ANALYZER
public static final String INDEX_ANALYZER
- See Also:
- Constant Field Values
-
QUERY
public static final String QUERY
- See Also:
- Constant Field Values
-
QUERY_ANALYZER
public static final String QUERY_ANALYZER
- See Also:
- Constant Field Values
-
MULTI_TERM
public static final String MULTI_TERM
- See Also:
- Constant Field Values
-
MULTI_TERM_ANALYZER
public static final String MULTI_TERM_ANALYZER
- See Also:
- Constant Field Values
-
SIMILARITY
public static final String SIMILARITY
- See Also:
- Constant Field Values
-
CHAR_FILTER
public static final String CHAR_FILTER
- See Also:
- Constant Field Values
-
CHAR_FILTERS
public static final String CHAR_FILTERS
- See Also:
- Constant Field Values
-
TOKENIZER
public static final String TOKENIZER
- See Also:
- Constant Field Values
-
FILTER
public static final String FILTER
- See Also:
- Constant Field Values
-
FILTERS
public static final String FILTERS
- See Also:
- Constant Field Values
-
AUTO_GENERATE_PHRASE_QUERIES
protected static final String AUTO_GENERATE_PHRASE_QUERIES
- See Also:
- Constant Field Values
-
ENABLE_GRAPH_QUERIES
protected static final String ENABLE_GRAPH_QUERIES
- See Also:
- Constant Field Values
-
SYNONYM_QUERY_STYLE
protected static final String SYNONYM_QUERY_STYLE
- See Also:
- Constant Field Values
-
-
Method Detail
-
isTokenized
public boolean isTokenized()
Returns true if fields of this type should be tokenized
-
isMultiValued
public boolean isMultiValued()
Returns true if fields can have multiple values
-
hasProperty
protected boolean hasProperty(int p)
Check if a property is set
-
isPolyField
public boolean isPolyField()
A "polyField" is a FieldType that can produce more than one IndexableField instance for a single value, via thecreateFields(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.- Returns:
- true if the
createFields(org.apache.solr.schema.SchemaField, Object)
method may return more than one field
-
isPointField
public boolean isPointField()
-
isUtf8Field
public boolean isUtf8Field()
-
useDocValuesAsStored
public boolean useDocValuesAsStored()
Returns true if the fields' docValues should be used for obtaining stored value
-
multiValuedFieldCache
public boolean multiValuedFieldCache()
Returns true if a single field value of this type has multiple logical values for the purposes of faceting, sorting, etc. Text fields normally return true since each token/word is a logical value.
-
init
protected void init(IndexSchema schema, Map<String,String> args)
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.
-
write
public boolean write(org.apache.solr.common.IteratorWriter.ItemWriter itemWriter)
-
setArgs
protected void setArgs(IndexSchema schema, Map<String,String> args)
Initializes the field type. Subclasses should usually overrideinit(IndexSchema, Map)
which is called by this method.
-
restrictProps
protected void restrictProps(int props)
:TODO: document this method
-
getTypeName
public String getTypeName()
The Name of this FieldType as specified in the schema file
-
createField
public org.apache.lucene.index.IndexableField createField(SchemaField field, Object value)
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.
- See Also:
toInternal(java.lang.String)
-
createField
protected org.apache.lucene.index.IndexableField createField(String name, String val, org.apache.lucene.index.IndexableFieldType type)
Create the field from native Lucene parts. Mostly intended for use by FieldTypes outputing multiple Fields per SchemaField- Parameters:
name
- The name of the fieldval
- The _internal_ value to indextype
-FieldType
- Returns:
- the
IndexableField
.
-
createFields
public List<org.apache.lucene.index.IndexableField> createFields(SchemaField field, Object value)
Given aSchemaField
, create one or moreIndexableField
instances- Parameters:
field
- theSchemaField
value
- The value to add to the field- Returns:
- An array of
IndexableField
- See Also:
createField(SchemaField, Object)
,isPolyField()
-
toInternal
public String toInternal(String val)
Convert an external value (from XML update command or from query string) into the internal format for both storing and indexing (which can be modified by any analyzers).
-
toExternal
public String toExternal(org.apache.lucene.index.IndexableField f)
Convert the stored-field format to an external (string, human readable) value- See Also:
toInternal(java.lang.String)
-
toObject
public Object toObject(org.apache.lucene.index.IndexableField f)
Convert the stored-field format to an external object.- Since:
- solr 1.3
- See Also:
toInternal(java.lang.String)
-
toObject
public Object toObject(SchemaField sf, org.apache.lucene.util.BytesRef term)
-
indexedToReadable
public String indexedToReadable(String indexedForm)
Given an indexed term, return the human readable representation
-
indexedToReadable
public org.apache.lucene.util.CharsRef indexedToReadable(org.apache.lucene.util.BytesRef input, org.apache.lucene.util.CharsRefBuilder output)
Given an indexed term, append the human readable representation
-
storedToReadable
public String storedToReadable(org.apache.lucene.index.IndexableField f)
Given the stored field, return the human readable representation
-
storedToIndexed
public String storedToIndexed(org.apache.lucene.index.IndexableField f)
Given the stored field, return the indexed form
-
readableToIndexed
public String readableToIndexed(String val)
Given the readable value, return the term value that will match it.
-
readableToIndexed
public void readableToIndexed(CharSequence val, org.apache.lucene.util.BytesRefBuilder result)
Given the readable value, return the term value that will match it. This method will modify the size and length of theresult
parameter and write from offset 0
-
setIsExplicitQueryAnalyzer
public void setIsExplicitQueryAnalyzer(boolean isExplicitQueryAnalyzer)
-
isExplicitQueryAnalyzer
public boolean isExplicitQueryAnalyzer()
-
setIsExplicitAnalyzer
public void setIsExplicitAnalyzer(boolean explicitAnalyzer)
-
isExplicitAnalyzer
public boolean isExplicitAnalyzer()
-
getClassArg
public String getClassArg()
- Returns:
- the string used to specify the concrete class name in a serialized representation: the
class arg. If the concrete class name was not specified via a class arg, returns
getClass().getName()
.
-
getPrefixQuery
public org.apache.lucene.search.Query getPrefixQuery(QParser parser, SchemaField sf, String termStr)
Returns a Query instance for doing prefix searches on this field type. Also, other QueryParser implementations may have different semantics.Sub-classes should override this method to provide their own range query implementation.
- Parameters:
parser
- theQParser
calling the methodsf
- the schema fieldtermStr
- the term string for prefix query, if blank then this query should match all docs with this field- Returns:
- a Query instance to perform prefix search
-
getUninversionType
public abstract 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. This specifies the structure to use.This method will not be used if the field is (effectively)
uninvertible="false"
- Parameters:
sf
- field instance- Returns:
- type to uninvert, or
null
(to disallow uninversion for the field) - See Also:
SchemaField.isUninvertible()
-
getIndexAnalyzer
public org.apache.lucene.analysis.Analyzer getIndexAnalyzer()
Returns the Analyzer to be used when indexing fields of this type.This method may be called many times, at any time.
- See Also:
getQueryAnalyzer()
-
getQueryAnalyzer
public org.apache.lucene.analysis.Analyzer getQueryAnalyzer()
Returns the Analyzer to be used when searching fields of this type.This method may be called many times, at any time.
- See Also:
getIndexAnalyzer()
-
supportsAnalyzers
protected boolean supportsAnalyzers()
Returns true if this type supports index and query analyzers, false otherwise.
-
setIndexAnalyzer
public final void setIndexAnalyzer(org.apache.lucene.analysis.Analyzer analyzer)
Sets the Analyzer to be used when indexing fields of this type.Subclasses should override
supportsAnalyzers()
to enable this function.
-
setQueryAnalyzer
public final void setQueryAnalyzer(org.apache.lucene.analysis.Analyzer analyzer)
Sets the Analyzer to be used when querying fields of this type.Subclasses should override
supportsAnalyzers()
to enable this function.
-
getSimilarity
public org.apache.lucene.search.similarities.Similarity getSimilarity()
Gets the Similarity used when scoring fields of this typeThe default implementation returns null, which means this type has no custom similarity associated with it.
- NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
-
getSimilarityFactory
public SimilarityFactory getSimilarityFactory()
Gets the factory for the Similarity used when scoring fields of this typeThe default implementation returns null, which means this type has no custom similarity factory associated with it.
- NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
-
getNumberType
public NumberType getNumberType()
Return the numeric type of this field, or null if this field is not a numeric field.
-
setSimilarity
public void setSimilarity(SimilarityFactory similarityFactory)
Sets the Similarity used when scoring fields of this type- NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
-
getPostingsFormat
public String getPostingsFormat()
-
getDocValuesFormat
public final String getDocValuesFormat()
-
write
public abstract void write(TextResponseWriter writer, String name, org.apache.lucene.index.IndexableField f) throws IOException
calls back to TextResponseWriter to write the field valueSub-classes should prefer using
toExternal(IndexableField)
ortoObject(IndexableField)
to get the writeable external value off
instead of directly usingf.stringValue()
orf.binaryValue()
- Throws:
IOException
-
getSortField
public abstract org.apache.lucene.search.SortField getSortField(SchemaField field, boolean top)
Returns the SortField instance that should be used to sort fields of this type.
-
getSortField
protected static org.apache.lucene.search.SortField getSortField(SchemaField field, org.apache.lucene.search.SortField.Type sortType, boolean reverse, Object missingLow, Object missingHigh)
A Helper utility method for use by subclasses.This method deals with:
SchemaField.checkSortability()
- Creating a
SortField
onfield
with the specifiedreverse
&sortType
- Setting the
SortField.setMissingValue(java.lang.Object)
tomissingLow
ormissingHigh
as appropriate based on the value ofreverse
and thesortMissingFirst
&sortMissingLast
properties of thefield
- Parameters:
field
- The SchemaField to sort on. May usesortMissingFirst
orsortMissingLast
or neither.sortType
- The sort Type of the underlying values in thefield
reverse
- True if natural order of thesortType
should be reversedmissingLow
- ThemissingValue
to be used if the other params indicate that docs w/o values should sort as "low" as possible.missingHigh
- ThemissingValue
to be used if the other params indicate that docs w/o values should sort as "high" as possible.- See Also:
getSortedSetSortField(org.apache.solr.schema.SchemaField, org.apache.lucene.search.SortedSetSelector.Type, boolean, java.lang.Object, java.lang.Object)
-
getSortedSetSortField
protected static org.apache.lucene.search.SortField getSortedSetSortField(SchemaField field, org.apache.lucene.search.SortedSetSelector.Type selector, boolean reverse, Object missingLow, Object missingHigh)
Same asgetSortField(org.apache.solr.schema.SchemaField, boolean)
but usingSortedSetSortField
-
getSortedNumericSortField
protected static org.apache.lucene.search.SortField getSortedNumericSortField(SchemaField field, org.apache.lucene.search.SortField.Type sortType, org.apache.lucene.search.SortedNumericSelector.Type selector, boolean reverse, Object missingLow, Object missingHigh)
Same asgetSortField(org.apache.solr.schema.SchemaField, boolean)
but usingSortedNumericSortField
.
-
getStringSort
protected org.apache.lucene.search.SortField getStringSort(SchemaField field, boolean reverse)
Utility usable by subclasses when they want to get basic String sorting using common checks.
-
getNumericSort
protected org.apache.lucene.search.SortField getNumericSort(SchemaField field, NumberType type, boolean reverse)
Utility usable by subclasses when they want to get basic Numeric sorting using common checks.- See Also:
SchemaField.checkSortability()
,getSortedNumericSortField(org.apache.solr.schema.SchemaField, org.apache.lucene.search.SortField.Type, org.apache.lucene.search.SortedNumericSelector.Type, boolean, java.lang.Object, java.lang.Object)
,getSortField(org.apache.solr.schema.SchemaField, boolean)
-
getValueSource
public org.apache.lucene.queries.function.ValueSource getValueSource(SchemaField field, QParser parser)
called to get the default value source (normally, from the Lucene FieldCache.)
-
getSingleValueSource
public org.apache.lucene.queries.function.ValueSource getSingleValueSource(FieldType.MultiValueSelector choice, SchemaField field, QParser parser)
Method for dynamically building a ValueSource based on a single value of a multivalued field.The default implementation throws an error except in the trivial case where this method is used on a
SchemaField
that is in fact not-multivalued, in which case it delegates togetValueSource(org.apache.solr.schema.SchemaField, org.apache.solr.search.QParser)
- See Also:
FieldType.MultiValueSelector
-
getDefaultMultiValueSelectorForSort
public FieldType.MultiValueSelector getDefaultMultiValueSelectorForSort(SchemaField field, boolean reverse)
Method for indicating whichFieldType.MultiValueSelector
(if any) should be used when sorting on a multivalued field of this type for the specified direction (asc/desc). The default implementation returnsnull
(for all inputs).- Parameters:
field
- The SchemaField (of this type) in questionreverse
- false if this is an ascending sort, true if this is a descending sort.- Returns:
- the implicit selector to use for this direction, or null if implicit sorting on the specified direction is not supported and should return an error.
- See Also:
FieldType.MultiValueSelector
-
getRangeQuery
public org.apache.lucene.search.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.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.By default range queries with '*'s or nulls on either side are treated as existence queries and are created with
getExistenceQuery(org.apache.solr.search.QParser, org.apache.solr.schema.SchemaField)
. If unbounded range queries should not be treated as existence queries for a certain fieldType, thentreatUnboundedRangeAsExistence(org.apache.solr.schema.SchemaField)
should be overridden.Sub-classes should override the
getSpecializedRangeQuery(org.apache.solr.search.QParser, org.apache.solr.schema.SchemaField, java.lang.String, java.lang.String, boolean, boolean)
method to provide their own range query implementation.- 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 alloweminInclusive
- 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
-
treatUnboundedRangeAsExistence
protected boolean treatUnboundedRangeAsExistence(SchemaField field)
Returns whether an unbounded range query should be treated the same as an existence query for the given field type.- Parameters:
field
- the schema field- Returns:
- whether unbounded range and existence are equivalent for the given field type.
-
getSpecializedRangeQuery
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.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
getRangeQuery(org.apache.solr.search.QParser, org.apache.solr.schema.SchemaField, java.lang.String, java.lang.String, boolean, boolean)
for that logic.- 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
-
getExistenceQuery
public org.apache.lucene.search.Query getExistenceQuery(QParser parser, SchemaField field)
Returns a Query instance for doing existence searches for a field. If the field does not have docValues or norms, this method will callgetSpecializedExistenceQuery(org.apache.solr.search.QParser, org.apache.solr.schema.SchemaField)
, which defaults to an unbounded rangeQuery.This method should only be overridden whenever a fieldType does not support
DocValuesFieldExistsQuery
orNormsFieldExistsQuery
. If a fieldType does not support an unbounded rangeQuery as an existenceQuery (such asdouble
orfloat
fields),getSpecializedExistenceQuery(org.apache.solr.search.QParser, org.apache.solr.schema.SchemaField)
should be overridden.- Parameters:
parser
- TheQParser
calling the methodfield
- TheSchemaField
of the field to search- Returns:
- The
Query
instance.
-
getSpecializedExistenceQuery
protected org.apache.lucene.search.Query getSpecializedExistenceQuery(QParser parser, SchemaField field)
Returns a Query instance for doing existence searches for a field without certain options, such as docValues or norms.This method can be overridden to implement specialized existence logic for fieldTypes. The default query returned is an unbounded range query.
- Parameters:
parser
- TheQParser
calling the methodfield
- TheSchemaField
of the field to search- Returns:
- The
Query
instance.
-
getFieldQuery
public org.apache.lucene.search.Query getFieldQuery(QParser parser, SchemaField field, String externalVal)
Returns a Query instance for doing searches against a field.- 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
-
getFieldTermQuery
public org.apache.lucene.search.Query getFieldTermQuery(QParser parser, SchemaField field, String externalVal)
Returns a Query instance for doing a single term search against a field. This term will not be analyzed before searching.- Parameters:
parser
- TheQParser
calling the methodfield
- TheSchemaField
of the field to searchexternalVal
- The String representation of the term value to search- Returns:
- The
Query
instance.
-
getSetQuery
public org.apache.lucene.search.Query getSetQuery(QParser parser, SchemaField field, Collection<String> externalVals)
- WARNING: This API is experimental and might change in incompatible ways in the next release.
-
getRewriteMethod
public org.apache.lucene.search.MultiTermQuery.RewriteMethod getRewriteMethod(QParser parser, SchemaField field)
Expert: Returns the rewrite method for multiterm queries such as wildcards.- Parameters:
parser
- TheQParser
calling the methodfield
- TheSchemaField
of the field to search- Returns:
- A suitable rewrite method for rewriting multi-term queries to primitive queries.
-
checkSchemaField
public void checkSchemaField(SchemaField field)
Check'sSchemaField
instances constructed using this field type to ensure that they are valid.This method is called by the
SchemaField
constructor to check that its initialization does not violate any fundamental requirements of theFieldType
. Subclasses may choose to throw aSolrException
if invariants are violated by theSchemaField.
-
checkSupportsDocValues
protected void checkSupportsDocValues()
Called bycheckSchemaField(SchemaField)
if the field has docValues. By default none do.
-
getNamedPropertyValues
public org.apache.solr.common.util.SimpleOrderedMap<Object> getNamedPropertyValues(boolean showDefaults)
Get a map of property name -> value for this field type.- Parameters:
showDefaults
- if true, include default properties.
-
getNonFieldPropertyArgs
protected Map<String,String> getNonFieldPropertyArgs()
Returns args to this field type that aren't standard field properties
-
getAnalyzerProperties
protected static org.apache.solr.common.util.SimpleOrderedMap<Object> getAnalyzerProperties(org.apache.lucene.analysis.Analyzer analyzer)
Returns a description of the given analyzer, by either reporting the Analyzer class name (and optionally luceneMatchVersion) if it's not a TokenizerChain, or if it is, querying each analysis factory for its name and args.
-
toNativeType
public Object toNativeType(Object val)
Converts any Object to a java Object native to this field type
-
marshalSortValue
public Object marshalSortValue(Object value)
Convert a value used by the FieldComparator for this FieldType's SortField into a marshalable value for distributed sorting.
-
unmarshalSortValue
public Object unmarshalSortValue(Object value)
Convert a value marshaled viamarshalSortValue(java.lang.Object)
back into a value usable by the FieldComparator for this FieldType's SortField
-
marshalStringSortValue
protected static Object marshalStringSortValue(Object value)
Marshals a string-based field value.
-
unmarshalStringSortValue
protected static Object unmarshalStringSortValue(Object value)
Unmarshals a string-based field value.
-
marshalBase64SortValue
protected static Object marshalBase64SortValue(Object value)
Marshals a binary field value.
-
-