Class IndexSchema
- java.lang.Object
-
- org.apache.solr.schema.IndexSchema
-
- Direct Known Subclasses:
ManagedIndexSchema
public class IndexSchema extends Object
IndexSchema
contains information about the valid fields in an index and the types of those fields.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
IndexSchema.DynamicCopy
static class
IndexSchema.DynamicField
static class
IndexSchema.DynamicReplacement
static class
IndexSchema.SchemaProps
-
Field Summary
-
Constructor Summary
Constructors Modifier Constructor Description IndexSchema(String name, InputSource is, org.apache.lucene.util.Version luceneVersion, SolrResourceLoader resourceLoader)
Constructs a schema using the specified resource name and stream.protected
IndexSchema(org.apache.lucene.util.Version luceneVersion, SolrResourceLoader loader)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description IndexSchema
addCopyFields(String source, Collection<String> destinations, int maxChars)
Copies this schema and adds the new copy fields to the copy.IndexSchema
addCopyFields(Map<String,Collection<String>> copyFields, boolean persist)
Copies this schema and adds the new copy fields to the copy Requires synchronizing on the object returned bygetSchemaUpdateLock()
.IndexSchema
addDynamicFields(Collection<SchemaField> newDynamicFields, Map<String,Collection<String>> copyFieldNames, boolean persist)
Copies this schema, adds the given dynamic fields to the copy, Requires synchronizing on the object returned bygetSchemaUpdateLock()
.IndexSchema
addField(SchemaField newField)
IndexSchema
addField(SchemaField newField, boolean persist)
Copies this schema, adds the given field to the copy Requires synchronizing on the object returned bygetSchemaUpdateLock()
.IndexSchema
addField(SchemaField newField, Collection<String> copyFieldNames)
Copies this schema, adds the given field to the copy Requires synchronizing on the object returned bygetSchemaUpdateLock()
.IndexSchema
addFields(Collection<SchemaField> newFields)
Copies this schema, adds the given fields to the copy.IndexSchema
addFields(Collection<SchemaField> newFields, Map<String,Collection<String>> copyFieldNames, boolean persist)
Copies this schema, adds the given fields to the copy Requires synchronizing on the object returned bygetSchemaUpdateLock()
.IndexSchema
addFieldTypes(List<FieldType> fieldTypeList, boolean persist)
Copies this schema, adds the given field type to the copy, Requires synchronizing on the object returned bygetSchemaUpdateLock()
.IndexSchema
deleteCopyFields(Map<String,Collection<String>> copyFields)
Copies this schema and deletes the given copy fields from the copy.IndexSchema
deleteDynamicFields(Collection<String> fieldNamePatterns)
Copies this schema, deletes the named dynamic fields from the copy.IndexSchema
deleteFields(Collection<String> names)
Copies this schema, deletes the named fields from the copy.IndexSchema
deleteFieldTypes(Collection<String> names)
Copies this schema, deletes the named field types from the copy.protected static IndexSchema.DynamicField[]
dynamicFieldListToSortedArray(List<IndexSchema.DynamicField> dynamicFieldList)
Sort the dynamic fields and stuff them in a normal array for faster access.List<SimpleOrderedMap<Object>>
getCopyFieldProperties(boolean showDetails, Set<String> requestedSourceFields, Set<String> requestedDestinationFields)
Returns a list of copyField directives, with optional details and optionally restricting to those directives that contain the requested source and/or destination field names.List<CopyField>
getCopyFieldsList(String sourceField)
Get all copy fields for a specified source field, both static and dynamic ones.Map<String,List<CopyField>>
getCopyFieldsMap()
List<String>
getCopySources(String destField)
Get all copy fields, both the static and the dynamic ones.org.apache.lucene.util.Version
getDefaultLuceneMatchVersion()
The Default Lucene Match Version for this IndexSchemaIndexSchema.DynamicCopy[]
getDynamicCopyFields()
SchemaField[]
getDynamicFieldPrototypes()
IndexSchema.DynamicField[]
getDynamicFields()
FieldType
getDynamicFieldType(String fieldName)
Returns the FieldType of the best matching dynamic field for the specified field nameString
getDynamicPattern(String fieldName)
SchemaField
getField(String fieldName)
Returns the SchemaField that should be used for the specified field nameSchemaField
getFieldOrNull(String fieldName)
Returns the SchemaField that should be used for the specified field name, or null if none exists.Map<String,SchemaField>
getFields()
Provides direct access to the Map containing all explicit (ie: non-dynamic) fields in the index, keyed on field name.List<SchemaField>
getFieldsWithDefaultValue()
Provides direct access to the List containing all fields with a default valueFieldType
getFieldType(String fieldName)
Returns the FieldType for the specified field name.FieldType
getFieldTypeByName(String fieldTypeName)
Given the name of aFieldType
(not to be confused withgetFieldType(String)
which takes in the name of a field), return theFieldType
.FieldType
getFieldTypeNoEx(String fieldName)
Returns the FieldType for the specified field name.Map<String,FieldType>
getFieldTypes()
Provides direct access to the Map containing all Field Types in the index, keyed on field type name.protected String
getFieldTypeXPathExpressions()
org.apache.lucene.analysis.Analyzer
getIndexAnalyzer()
Returns the Analyzer used when indexing documents for this indexMap
getNamedPropertyValues()
Get a map of property name -> value for the whole schema.Map<String,Object>
getNamedPropertyValues(String name, SolrParams params)
org.apache.lucene.queries.payloads.PayloadDecoder
getPayloadDecoder(String field)
org.apache.lucene.analysis.Analyzer
getQueryAnalyzer()
Returns the Analyzer used when searching this indexCollection<SchemaField>
getRequiredFields()
Provides direct access to the List containing all required fields.SolrResourceLoader
getResourceLoader()
The resource loader to be used to load components related to the schema when the schema is loading / initialising.String
getResourceName()
Gets the name of the resource used to instantiate this schema.String
getSchemaName()
Gets the name of the schema as specified in the schema resource.Object
getSchemaUpdateLock()
Returns the schema update lock that should be synchronized on to update the schema.org.apache.lucene.search.similarities.Similarity
getSimilarity()
Returns the Similarity used for this indexSimilarityFactory
getSimilarityFactory()
Returns the SimilarityFactory that constructed the Similarity for this indexFunction<String,UninvertingReader.Type>
getUninversionMapper()
SchemaField
getUniqueKeyField()
Unique Key field specified in the schema fileorg.apache.lucene.index.IndexableField
getUniqueKeyField(org.apache.lucene.document.Document doc)
The raw (field type encoded) value of the Unique Key field for the specified Documentfloat
getVersion()
boolean
hasExplicitField(String fieldName)
Does the schema explicitly define the specified field, i.e.boolean
isCopyFieldTarget(SchemaField f)
Check if a field is used as the destination of a copyField operationprotected boolean
isDuplicateDynField(List<IndexSchema.DynamicField> dFields, SchemaField f)
boolean
isDynamicField(String fieldName)
Is the specified field dynamic or not.boolean
isMutable()
boolean
isUsableForChildDocs()
Helper method that returnstrue
if theROOT_FIELD_NAME
uses the exact same 'type' as thegetUniqueKeyField()
protected boolean
isValidDynamicField(List<IndexSchema.DynamicField> dFields, SchemaField f)
protected static boolean
isValidFieldGlob(String name)
Returns true if the given name has exactly one asterisk either at the start or end of the nameprotected void
loadCopyFields(Document document, XPath xpath)
Loads the copy fieldsprotected Map<String,Boolean>
loadFields(Document document, XPath xpath)
Loads fields and dynamic fields.SchemaField
newDynamicField(String fieldNamePattern, String fieldType, Map<String,?> options)
Returns a SchemaField if the given dynamic field glob does not already exist in this schema, and does not match any dynamic fields in this schema.SchemaField
newField(String fieldName, String fieldType, Map<String,?> options)
Returns a SchemaField if the given fieldName does not already exist in this schema, and does not match any dynamic fields in this schema.FieldType
newFieldType(String typeName, String className, Map<String,?> options)
Returns a FieldType if the given typeName does not already exist in this schema.protected void
postReadInform()
String
printableUniqueKey(org.apache.lucene.document.Document doc)
The printable value of the Unique Key field for the specified Documentprotected void
readSchema(InputSource is)
void
refreshAnalyzers()
This will re-create the Analyzers.void
registerCopyField(String source, String dest)
void
registerCopyField(String source, String dest, int maxChars)
NOTE: this function is not thread safe.void
registerDynamicFields(SchemaField... fields)
Register one or more new Dynamic Fields with the Schema.protected void
registerExplicitSrcAndDestFields(String source, int maxChars, SchemaField destSchemaField, SchemaField sourceSchemaField)
ManagedIndexSchema
replaceDynamicField(String fieldNamePattern, FieldType replacementFieldType, Map<String,?> replacementArgs)
Copies this schema, deletes the named dynamic field from the copy, creates a new dynamic field with the same field name pattern using the given args, then rebinds any referring dynamic copy fields to the replacement dynamic field.IndexSchema
replaceField(String fieldName, FieldType replacementFieldType, Map<String,?> replacementArgs)
Copies this schema, deletes the named field from the copy, creates a new field with the same name using the given args, then rebinds any referring copy fields to the replacement field.IndexSchema
replaceFieldType(String typeName, String replacementClassName, Map<String,Object> replacementArgs)
Copies this schema, deletes the named field type from the copy, creates a new field type with the same name using the given args, rebuilds fields and dynamic fields of the given type, then rebinds any referring copy fields to the rebuilt fields.boolean
savesChildDocRelations()
Helper method that returnstrue
if theROOT_FIELD_NAME
uses the exact same 'type' as thegetUniqueKeyField()
and hasNEST_PATH_FIELD_NAME
defined as aNestPathField
void
setResourceName(String resourceName)
Sets the name of the resource used to instantiate this schema.
-
-
-
Field Detail
-
COPY_FIELD
public static final String COPY_FIELD
- See Also:
- Constant Field Values
-
COPY_FIELDS
public static final String COPY_FIELDS
- See Also:
- Constant Field Values
-
DEFAULT_SCHEMA_FILE
public static final String DEFAULT_SCHEMA_FILE
- See Also:
- Constant Field Values
-
DESTINATION
public static final String DESTINATION
- See Also:
- Constant Field Values
-
DYNAMIC_FIELD
public static final String DYNAMIC_FIELD
- See Also:
- Constant Field Values
-
DYNAMIC_FIELDS
public static final String DYNAMIC_FIELDS
- See Also:
- Constant Field Values
-
FIELD
public static final String FIELD
- See Also:
- Constant Field Values
-
FIELDS
public static final String FIELDS
- See Also:
- Constant Field Values
-
FIELD_TYPE
public static final String FIELD_TYPE
- See Also:
- Constant Field Values
-
FIELD_TYPES
public static final String FIELD_TYPES
- See Also:
- Constant Field Values
-
INTERNAL_POLY_FIELD_PREFIX
public static final String INTERNAL_POLY_FIELD_PREFIX
- See Also:
- Constant Field Values
-
LUCENE_MATCH_VERSION_PARAM
public static final String LUCENE_MATCH_VERSION_PARAM
- See Also:
- Constant Field Values
-
MAX_CHARS
public static final String MAX_CHARS
- See Also:
- Constant Field Values
-
NAME
public static final String NAME
- See Also:
- Constant Field Values
-
NEST_PARENT_FIELD_NAME
public static final String NEST_PARENT_FIELD_NAME
- See Also:
- Constant Field Values
-
NEST_PATH_FIELD_NAME
public static final String NEST_PATH_FIELD_NAME
- See Also:
- Constant Field Values
-
REQUIRED
public static final String REQUIRED
- See Also:
- Constant Field Values
-
SCHEMA
public static final String SCHEMA
- See Also:
- Constant Field Values
-
SIMILARITY
public static final String SIMILARITY
- See Also:
- Constant Field Values
-
SLASH
public static final String SLASH
- See Also:
- Constant Field Values
-
SOURCE
public static final String SOURCE
- See Also:
- Constant Field Values
-
TYPE
public static final String TYPE
- See Also:
- Constant Field Values
-
TYPES
public static final String TYPES
- See Also:
- Constant Field Values
-
ROOT_FIELD_NAME
public static final String ROOT_FIELD_NAME
- See Also:
- Constant Field Values
-
UNIQUE_KEY
public static final String UNIQUE_KEY
- See Also:
- Constant Field Values
-
VERSION
public static final String VERSION
- See Also:
- Constant Field Values
-
resourceName
protected String resourceName
-
name
protected String name
-
luceneVersion
protected final org.apache.lucene.util.Version luceneVersion
-
version
protected float version
-
loader
protected final SolrResourceLoader loader
-
fields
protected Map<String,SchemaField> fields
-
fieldsWithDefaultValue
protected List<SchemaField> fieldsWithDefaultValue
-
requiredFields
protected Collection<SchemaField> requiredFields
-
dynamicFields
protected volatile IndexSchema.DynamicField[] dynamicFields
-
dynamicFieldCache
protected Map<String,SchemaField> dynamicFieldCache
-
schemaAware
protected List<SchemaAware> schemaAware
-
dynamicCopyFields
protected IndexSchema.DynamicCopy[] dynamicCopyFields
-
copyFieldTargetCounts
protected Map<SchemaField,Integer> copyFieldTargetCounts
keys are all fields copied to, count is num of copyField directives that target them.
-
similarity
protected org.apache.lucene.search.similarities.Similarity similarity
-
similarityFactory
protected SimilarityFactory similarityFactory
-
isExplicitSimilarity
protected boolean isExplicitSimilarity
-
uniqueKeyField
protected SchemaField uniqueKeyField
-
uniqueKeyFieldName
protected String uniqueKeyFieldName
-
uniqueKeyFieldType
protected FieldType uniqueKeyFieldType
-
-
Constructor Detail
-
IndexSchema
public IndexSchema(String name, InputSource is, org.apache.lucene.util.Version luceneVersion, SolrResourceLoader resourceLoader)
Constructs a schema using the specified resource name and stream.
-
IndexSchema
protected IndexSchema(org.apache.lucene.util.Version luceneVersion, SolrResourceLoader loader)
-
-
Method Detail
-
getDynamicFields
public IndexSchema.DynamicField[] getDynamicFields()
-
getDynamicCopyFields
public IndexSchema.DynamicCopy[] getDynamicCopyFields()
-
getResourceLoader
public SolrResourceLoader getResourceLoader()
The resource loader to be used to load components related to the schema when the schema is loading / initialising. It should not be used for any other purpose or time; considerSolrCore.getResourceLoader()
instead.- Since:
- solr 1.4
-
getResourceName
public String getResourceName()
Gets the name of the resource used to instantiate this schema.
-
setResourceName
public void setResourceName(String resourceName)
Sets the name of the resource used to instantiate this schema.
-
getSchemaName
public String getSchemaName()
Gets the name of the schema as specified in the schema resource.
-
getDefaultLuceneMatchVersion
public org.apache.lucene.util.Version getDefaultLuceneMatchVersion()
The Default Lucene Match Version for this IndexSchema
-
getVersion
public float getVersion()
-
getFields
public Map<String,SchemaField> getFields()
Provides direct access to the Map containing all explicit (ie: non-dynamic) fields in the index, keyed on field name.Modifying this Map (or any item in it) will affect the real schema
NOTE: this function is not thread safe. However, it is safe to use within the standard
inform( SolrCore core )
function forSolrCoreAware
classes. Outsideinform
, this could potentially throw a ConcurrentModificationException
-
getFieldTypes
public Map<String,FieldType> getFieldTypes()
Provides direct access to the Map containing all Field Types in the index, keyed on field type name.Modifying this Map (or any item in it) will affect the real schema. However if you make any modifications, be sure to call
refreshAnalyzers()
to update the Analyzers for the registered fields.NOTE: this function is not thread safe. However, it is safe to use within the standard
inform( SolrCore core )
function forSolrCoreAware
classes. Outsideinform
, this could potentially throw a ConcurrentModificationException
-
getFieldsWithDefaultValue
public List<SchemaField> getFieldsWithDefaultValue()
Provides direct access to the List containing all fields with a default value
-
getRequiredFields
public Collection<SchemaField> getRequiredFields()
Provides direct access to the List containing all required fields. This list contains all fields with default values.
-
getSimilarity
public org.apache.lucene.search.similarities.Similarity getSimilarity()
Returns the Similarity used for this index
-
getSimilarityFactory
public SimilarityFactory getSimilarityFactory()
Returns the SimilarityFactory that constructed the Similarity for this index
-
getIndexAnalyzer
public org.apache.lucene.analysis.Analyzer getIndexAnalyzer()
Returns the Analyzer used when indexing documents for this indexThis Analyzer is field (and dynamic field) name aware, and delegates to a field specific Analyzer based on the field type.
-
getQueryAnalyzer
public org.apache.lucene.analysis.Analyzer getQueryAnalyzer()
Returns the Analyzer used when searching this indexThis Analyzer is field (and dynamic field) name aware, and delegates to a field specific Analyzer based on the field type.
-
getUniqueKeyField
public SchemaField getUniqueKeyField()
Unique Key field specified in the schema file- Returns:
- null if this schema has no unique key field
-
getUniqueKeyField
public org.apache.lucene.index.IndexableField getUniqueKeyField(org.apache.lucene.document.Document doc)
The raw (field type encoded) value of the Unique Key field for the specified Document- Returns:
- null if this schema has no unique key field
- See Also:
printableUniqueKey(org.apache.lucene.document.Document)
-
printableUniqueKey
public String printableUniqueKey(org.apache.lucene.document.Document doc)
The printable value of the Unique Key field for the specified Document- Returns:
- null if this schema has no unique key field
-
refreshAnalyzers
public void refreshAnalyzers()
This will re-create the Analyzers. If you make any modifications to the Field map (getFields()
, this function is required to synch the internally cached field analyzers.- Since:
- solr 1.3
-
getUninversionMapper
public Function<String,UninvertingReader.Type> getUninversionMapper()
- See Also:
UninvertingReader
-
isMutable
public boolean isMutable()
-
readSchema
protected void readSchema(InputSource is)
-
postReadInform
protected void postReadInform()
-
loadFields
protected Map<String,Boolean> loadFields(Document document, XPath xpath) throws XPathExpressionException
Loads fields and dynamic fields.- Returns:
- a map from field name to explicit required value
- Throws:
XPathExpressionException
-
dynamicFieldListToSortedArray
protected static IndexSchema.DynamicField[] dynamicFieldListToSortedArray(List<IndexSchema.DynamicField> dynamicFieldList)
Sort the dynamic fields and stuff them in a normal array for faster access.
-
loadCopyFields
protected void loadCopyFields(Document document, XPath xpath) throws XPathExpressionException
Loads the copy fields- Throws:
XPathExpressionException
-
isValidFieldGlob
protected static boolean isValidFieldGlob(String name)
Returns true if the given name has exactly one asterisk either at the start or end of the name
-
isValidDynamicField
protected boolean isValidDynamicField(List<IndexSchema.DynamicField> dFields, SchemaField f)
-
registerDynamicFields
public void registerDynamicFields(SchemaField... fields)
Register one or more new Dynamic Fields with the Schema.- Parameters:
fields
- The sequence ofSchemaField
-
isDuplicateDynField
protected boolean isDuplicateDynField(List<IndexSchema.DynamicField> dFields, SchemaField f)
-
registerCopyField
public void registerCopyField(String source, String dest, int maxChars)
NOTE: this function is not thread safe. However, it is safe to use within the standard
inform( SolrCore core )
function forSolrCoreAware
classes. Outsideinform
, this could potentially throw a ConcurrentModificationException- See Also:
SolrCoreAware
-
registerExplicitSrcAndDestFields
protected void registerExplicitSrcAndDestFields(String source, int maxChars, SchemaField destSchemaField, SchemaField sourceSchemaField)
-
getDynamicFieldPrototypes
public SchemaField[] getDynamicFieldPrototypes()
-
hasExplicitField
public boolean hasExplicitField(String fieldName)
Does the schema explicitly define the specified field, i.e. not as a result of a copyField declaration? We consider it explicitly defined if it matches a field name or a dynamicField name.- Returns:
- true if explicitly declared in the schema.
-
isDynamicField
public boolean isDynamicField(String fieldName)
Is the specified field dynamic or not.- Returns:
- true if the specified field is dynamic
-
getFieldOrNull
public SchemaField getFieldOrNull(String fieldName)
Returns the SchemaField that should be used for the specified field name, or null if none exists.- Parameters:
fieldName
- may be an explicitly defined field or a name that matches a dynamic field.- Returns:
- The
SchemaField
- See Also:
getFieldType(java.lang.String)
,getField(String)
-
getField
public SchemaField getField(String fieldName)
Returns the SchemaField that should be used for the specified field name- Parameters:
fieldName
- may be an explicitly defined field or a name that matches a dynamic field.- Returns:
- The
SchemaField
- Throws:
SolrException
- if no such field exists- See Also:
getFieldType(java.lang.String)
,getFieldOrNull(String)
-
getFieldType
public FieldType getFieldType(String fieldName)
Returns the FieldType for the specified field name.This method exists because it can be more efficient then
getField(java.lang.String)
for dynamic fields if a full SchemaField isn't needed.- Parameters:
fieldName
- may be an explicitly created field, or a name that excercises a dynamic field.- Throws:
SolrException
- if no such field exists- See Also:
getField(String)
,getFieldTypeNoEx(java.lang.String)
-
getFieldTypeByName
public FieldType getFieldTypeByName(String fieldTypeName)
Given the name of aFieldType
(not to be confused withgetFieldType(String)
which takes in the name of a field), return theFieldType
.
-
getFieldTypeNoEx
public FieldType getFieldTypeNoEx(String fieldName)
Returns the FieldType for the specified field name.This method exists because it can be more efficient then
getField(java.lang.String)
for dynamic fields if a full SchemaField isn't needed.- Parameters:
fieldName
- may be an explicitly created field, or a name that exercises a dynamic field.- Returns:
- null if field is not defined.
- See Also:
getField(String)
,getFieldTypeNoEx(java.lang.String)
-
getDynamicFieldType
public FieldType getDynamicFieldType(String fieldName)
Returns the FieldType of the best matching dynamic field for the specified field name- Parameters:
fieldName
- may be an explicitly created field, or a name that exercises a dynamic field.- Throws:
SolrException
- if no such field exists- See Also:
getField(String)
,getFieldTypeNoEx(java.lang.String)
-
getCopySources
public List<String> getCopySources(String destField)
Get all copy fields, both the static and the dynamic ones.- Returns:
- Array of fields copied into this field
-
getCopyFieldsList
public List<CopyField> getCopyFieldsList(String sourceField)
Get all copy fields for a specified source field, both static and dynamic ones.- Returns:
- List of CopyFields to copy to.
- Since:
- solr 1.4
-
isCopyFieldTarget
public boolean isCopyFieldTarget(SchemaField f)
Check if a field is used as the destination of a copyField operation- Since:
- solr 1.3
-
getNamedPropertyValues
public Map getNamedPropertyValues()
Get a map of property name -> value for the whole schema.
-
getNamedPropertyValues
public Map<String,Object> getNamedPropertyValues(String name, SolrParams params)
-
getCopyFieldProperties
public List<SimpleOrderedMap<Object>> getCopyFieldProperties(boolean showDetails, Set<String> requestedSourceFields, Set<String> requestedDestinationFields)
Returns a list of copyField directives, with optional details and optionally restricting to those directives that contain the requested source and/or destination field names.- Parameters:
showDetails
- If true, source and destination dynamic bases, and explicit fields matched by source globs, will be added to dynamic copyField directives where appropriaterequestedSourceFields
- If not null, output is restricted to those copyField directives with the requested source field namesrequestedDestinationFields
- If not null, output is restricted to those copyField directives with the requested destination field names- Returns:
- a list of copyField directives
-
addField
public IndexSchema addField(SchemaField newField, boolean persist)
Copies this schema, adds the given field to the copy Requires synchronizing on the object returned bygetSchemaUpdateLock()
.- Parameters:
newField
- the SchemaField to addpersist
- to persist the schema or not- Returns:
- a new IndexSchema based on this schema with newField added
- See Also:
newField(String, String, Map)
-
addField
public IndexSchema addField(SchemaField newField)
-
addField
public IndexSchema addField(SchemaField newField, Collection<String> copyFieldNames)
Copies this schema, adds the given field to the copy Requires synchronizing on the object returned bygetSchemaUpdateLock()
.- Parameters:
newField
- the SchemaField to addcopyFieldNames
- 0 or more names of targets to copy this field to. The targets must already exist.- Returns:
- a new IndexSchema based on this schema with newField added
- See Also:
newField(String, String, Map)
-
addFields
public IndexSchema addFields(Collection<SchemaField> newFields)
Copies this schema, adds the given fields to the copy. Requires synchronizing on the object returned bygetSchemaUpdateLock()
.- Parameters:
newFields
- the SchemaFields to add- Returns:
- a new IndexSchema based on this schema with newFields added
- See Also:
newField(String, String, Map)
-
addFields
public IndexSchema addFields(Collection<SchemaField> newFields, Map<String,Collection<String>> copyFieldNames, boolean persist)
Copies this schema, adds the given fields to the copy Requires synchronizing on the object returned bygetSchemaUpdateLock()
.- Parameters:
newFields
- the SchemaFields to addcopyFieldNames
- 0 or more names of targets to copy this field to. The target fields must already exist.persist
- Persist the schema or not- Returns:
- a new IndexSchema based on this schema with newFields added
- See Also:
newField(String, String, Map)
-
deleteFields
public IndexSchema deleteFields(Collection<String> names)
Copies this schema, deletes the named fields from the copy.The schema will not be persisted.
Requires synchronizing on the object returned by
getSchemaUpdateLock()
.- Parameters:
names
- the names of the fields to delete- Returns:
- a new IndexSchema based on this schema with the named fields deleted
-
replaceField
public IndexSchema replaceField(String fieldName, FieldType replacementFieldType, Map<String,?> replacementArgs)
Copies this schema, deletes the named field from the copy, creates a new field with the same name using the given args, then rebinds any referring copy fields to the replacement field.The schema will not be persisted.
Requires synchronizing on the object returned by
getSchemaUpdateLock()
.- Parameters:
fieldName
- The name of the field to be replacedreplacementFieldType
- The field type of the replacement fieldreplacementArgs
- Initialization params for the replacement field- Returns:
- a new IndexSchema based on this schema with the named field replaced
-
addDynamicFields
public IndexSchema addDynamicFields(Collection<SchemaField> newDynamicFields, Map<String,Collection<String>> copyFieldNames, boolean persist)
Copies this schema, adds the given dynamic fields to the copy, Requires synchronizing on the object returned bygetSchemaUpdateLock()
.- Parameters:
newDynamicFields
- the SchemaFields to addcopyFieldNames
- 0 or more names of targets to copy this field to. The target fields must already exist.persist
- to persist the schema or not- Returns:
- a new IndexSchema based on this schema with newDynamicFields added
- See Also:
newDynamicField(String, String, Map)
-
deleteDynamicFields
public IndexSchema deleteDynamicFields(Collection<String> fieldNamePatterns)
Copies this schema, deletes the named dynamic fields from the copy.The schema will not be persisted.
Requires synchronizing on the object returned by
getSchemaUpdateLock()
.- Parameters:
fieldNamePatterns
- the names of the dynamic fields to delete- Returns:
- a new IndexSchema based on this schema with the named dynamic fields deleted
-
replaceDynamicField
public ManagedIndexSchema replaceDynamicField(String fieldNamePattern, FieldType replacementFieldType, Map<String,?> replacementArgs)
Copies this schema, deletes the named dynamic field from the copy, creates a new dynamic field with the same field name pattern using the given args, then rebinds any referring dynamic copy fields to the replacement dynamic field.The schema will not be persisted.
Requires synchronizing on the object returned by
getSchemaUpdateLock()
.- Parameters:
fieldNamePattern
- The glob for the dynamic field to be replacedreplacementFieldType
- The field type of the replacement dynamic fieldreplacementArgs
- Initialization params for the replacement dynamic field- Returns:
- a new IndexSchema based on this schema with the named dynamic field replaced
-
addCopyFields
public IndexSchema addCopyFields(Map<String,Collection<String>> copyFields, boolean persist)
Copies this schema and adds the new copy fields to the copy Requires synchronizing on the object returned bygetSchemaUpdateLock()
.- Parameters:
copyFields
- Key is the name of the source field name, value is a collection of target field names. Fields must exist.persist
- to persist the schema or not- Returns:
- The new Schema with the copy fields added
- See Also:
to limit the number of copied characters.
-
addCopyFields
public IndexSchema addCopyFields(String source, Collection<String> destinations, int maxChars)
Copies this schema and adds the new copy fields to the copy. Requires synchronizing on the object returned bygetSchemaUpdateLock()
- Parameters:
source
- source field namedestinations
- collection of target field namesmaxChars
- max number of characters to copy from the source to each of the destinations. UseCopyField.UNLIMITED
if you don't want to limit the number of copied chars.- Returns:
- The new Schema with the copy fields added
-
deleteCopyFields
public IndexSchema deleteCopyFields(Map<String,Collection<String>> copyFields)
Copies this schema and deletes the given copy fields from the copy.The schema will not be persisted.
Requires synchronizing on the object returned by
getSchemaUpdateLock()
.- Parameters:
copyFields
- Key is the name of the source field name, value is a collection of target field names. Each corresponding copy field directives must exist.- Returns:
- The new Schema with the copy fields deleted
-
newField
public SchemaField newField(String fieldName, String fieldType, Map<String,?> options)
Returns a SchemaField if the given fieldName does not already exist in this schema, and does not match any dynamic fields in this schema. The resulting SchemaField can be used in a call toaddField(SchemaField)
.- Parameters:
fieldName
- the name of the field to addfieldType
- the field type for the new fieldoptions
- the options to use when creating the SchemaField- Returns:
- The created SchemaField
- See Also:
addField(SchemaField)
-
newDynamicField
public SchemaField newDynamicField(String fieldNamePattern, String fieldType, Map<String,?> options)
Returns a SchemaField if the given dynamic field glob does not already exist in this schema, and does not match any dynamic fields in this schema. The resulting SchemaField can be used in a call toaddField(SchemaField)
.- Parameters:
fieldNamePattern
- the pattern for the dynamic field to addfieldType
- the field type for the new fieldoptions
- the options to use when creating the SchemaField- Returns:
- The created SchemaField
- See Also:
addField(SchemaField)
-
getSchemaUpdateLock
public Object getSchemaUpdateLock()
Returns the schema update lock that should be synchronized on to update the schema. Only applicable to mutable schemas.- Returns:
- the schema update lock object to synchronize on
-
addFieldTypes
public IndexSchema addFieldTypes(List<FieldType> fieldTypeList, boolean persist)
Copies this schema, adds the given field type to the copy, Requires synchronizing on the object returned bygetSchemaUpdateLock()
.- Parameters:
fieldTypeList
- a list of FieldTypes to addpersist
- to persist the schema or not- Returns:
- a new IndexSchema based on this schema with the new types added
- See Also:
newFieldType(String, String, Map)
-
deleteFieldTypes
public IndexSchema deleteFieldTypes(Collection<String> names)
Copies this schema, deletes the named field types from the copy.The schema will not be persisted.
Requires synchronizing on the object returned by
getSchemaUpdateLock()
.- Parameters:
names
- the names of the field types to delete- Returns:
- a new IndexSchema based on this schema with the named field types deleted
-
replaceFieldType
public IndexSchema replaceFieldType(String typeName, String replacementClassName, Map<String,Object> replacementArgs)
Copies this schema, deletes the named field type from the copy, creates a new field type with the same name using the given args, rebuilds fields and dynamic fields of the given type, then rebinds any referring copy fields to the rebuilt fields.The schema will not be persisted.
Requires synchronizing on the object returned by
getSchemaUpdateLock()
.- Parameters:
typeName
- The name of the field type to be replacedreplacementClassName
- The class name of the replacement field typereplacementArgs
- Initialization params for the replacement field type- Returns:
- a new IndexSchema based on this schema with the named field type replaced
-
newFieldType
public FieldType newFieldType(String typeName, String className, Map<String,?> options)
Returns a FieldType if the given typeName does not already exist in this schema. The resulting FieldType can be used in a call toaddFieldTypes(java.util.List, boolean)
.- Parameters:
typeName
- the name of the type to addclassName
- the name of the FieldType classoptions
- the options to use when creating the FieldType- Returns:
- The created FieldType
- See Also:
addFieldTypes(java.util.List, boolean)
-
getFieldTypeXPathExpressions
protected String getFieldTypeXPathExpressions()
-
isUsableForChildDocs
public boolean isUsableForChildDocs()
Helper method that returnstrue
if theROOT_FIELD_NAME
uses the exact same 'type' as thegetUniqueKeyField()
- NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
-
savesChildDocRelations
public boolean savesChildDocRelations()
Helper method that returnstrue
if theROOT_FIELD_NAME
uses the exact same 'type' as thegetUniqueKeyField()
and hasNEST_PATH_FIELD_NAME
defined as aNestPathField
- NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
-
getPayloadDecoder
public org.apache.lucene.queries.payloads.PayloadDecoder getPayloadDecoder(String field)
-
-