Class CloneFieldUpdateProcessorFactory
- java.lang.Object
-
- org.apache.solr.update.processor.UpdateRequestProcessorFactory
-
- org.apache.solr.update.processor.CloneFieldUpdateProcessorFactory
-
- All Implemented Interfaces:
NamedListInitializedPlugin
,SolrCoreAware
public class CloneFieldUpdateProcessorFactory extends UpdateRequestProcessorFactory implements SolrCoreAware
Clones the values found in any matchingsource
field into a configureddest
field.The
source
field(s) can be configured as either:- One or more
<str>
- An
<arr>
of<str>
- A
<lst>
containingFieldMutatingUpdateProcessorFactory style selector arguments
The
dest
field can be a single<str>
containing the literal name of a destination field, or it may be a<lst>
specifying a regexpattern
and areplacement
string. If the pattern + replacement option is used the pattern will be matched against all fields matched by the source selector, and the replacement string (including any capture groups specified from the pattern) will be evaluated a usingMatcher.replaceAll(String)
to generate the literal name of the destination field.If the resolved
dest
field already exists in the document, then the values from thesource
fields will be added to it. The "boost" value associated with thedest
will not be changed, and any boost specified on thesource
fields will be ignored. (If thedest
field did not exist prior to this processor, the newly createddest
field will have the default boost of 1.0)In the example below:
- The
category
field will be cloned into thecategory_s
field - Both the
authors
andeditors
fields will be cloned into thecontributors
field - Any field with a name ending in
_price
-- except forlist_price
-- will be cloned into theall_prices
- Any field name beginning with feat and ending in s (i.e. feats or features) will be cloned into a field prefixed with key_ and not ending in s. (i.e. key_feat or key_feature)
<updateRequestProcessorChain name="multiple-clones"> <processor class="solr.CloneFieldUpdateProcessorFactory"> <str name="source">category</str> <str name="dest">category_s</str> </processor> <processor class="solr.CloneFieldUpdateProcessorFactory"> <arr name="source"> <str>authors</str> <str>editors</str> </arr> <str name="dest">contributors</str> </processor> <processor class="solr.CloneFieldUpdateProcessorFactory"> <lst name="source"> <str name="fieldRegex">.*_price$</str> <lst name="exclude"> <str name="fieldName">list_price</str> </lst> </lst> <str name="dest">all_prices</str> </processor> <processor class="solr.processor.CloneFieldUpdateProcessorFactory"> <lst name="source"> <str name="fieldRegex">^feat(.*)s$</str> </lst> <lst name="dest"> <str name="pattern">^feat(.*)s$</str> <str name="replacement">key_feat$1</str> </str> </processor> </updateRequestProcessorChain>
In common case situations where you wish to use a single regular expression as both a
fieldRegex
selector and a destinationpattern
, a "short hand" syntax is support for convinience: Thepattern
andreplacement
may be specified at the top level, omittingsource
anddest
declarations completely, and thepattern
will be used to construct an equivalentsource
selector internally.For example, both of the following configurations are equivalent:
<!-- full syntax --> <processor class="solr.processor.CloneFieldUpdateProcessorFactory"> <lst name="source"> <str name="fieldRegex"^gt;$feat(.*)s$</str> </lst> <lst name="dest"> <str name="pattern">^feat(.*)s$</str> <str name="replacement">key_feat$1</str> </str> </processor> <!-- syntactic sugar syntax --> <processor class="solr.processor.CloneFieldUpdateProcessorFactory"> <str name="pattern">^feat(.*)s$</str> <str name="replacement">key_feat$1</str> </processor>
When cloning multiple fields (or a single multivalued field) into a single valued field, one of the
FieldValueSubsetUpdateProcessorFactory
implementations configured after theCloneFieldUpdateProcessorFactory
can be useful to reduce the list of values down to a single value.- Since:
- 4.0.0
- See Also:
FieldValueSubsetUpdateProcessorFactory
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.solr.update.processor.UpdateRequestProcessorFactory
UpdateRequestProcessorFactory.RunAlways
-
-
Field Summary
Fields Modifier and Type Field Description static String
DEST_PARAM
static String
PATTERN_PARAM
static String
REPLACEMENT_PARAM
static String
SOURCE_PARAM
-
Constructor Summary
Constructors Constructor Description CloneFieldUpdateProcessorFactory()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description UpdateRequestProcessor
getInstance(SolrQueryRequest req, SolrQueryResponse rsp, UpdateRequestProcessor next)
protected FieldMutatingUpdateProcessor.FieldNameSelector
getSourceSelector()
void
inform(SolrCore core)
void
init(org.apache.solr.common.util.NamedList<?> args)
init
will be called just once, immediately after creation.
-
-
-
Field Detail
-
SOURCE_PARAM
public static final String SOURCE_PARAM
- See Also:
- Constant Field Values
-
DEST_PARAM
public static final String DEST_PARAM
- See Also:
- Constant Field Values
-
PATTERN_PARAM
public static final String PATTERN_PARAM
- See Also:
- Constant Field Values
-
REPLACEMENT_PARAM
public static final String REPLACEMENT_PARAM
- See Also:
- Constant Field Values
-
-
Method Detail
-
getSourceSelector
protected final FieldMutatingUpdateProcessor.FieldNameSelector getSourceSelector()
-
init
public void init(org.apache.solr.common.util.NamedList<?> args)
Description copied from interface:NamedListInitializedPlugin
init
will be called just once, immediately after creation.Source of the initialization arguments will typically be solrconfig.xml, but will ultimately depends on the plugin itself
- Specified by:
init
in interfaceNamedListInitializedPlugin
- Parameters:
args
- non-null list of initialization parameters (may be empty)
-
inform
public void inform(SolrCore core)
- Specified by:
inform
in interfaceSolrCoreAware
-
getInstance
public final UpdateRequestProcessor getInstance(SolrQueryRequest req, SolrQueryResponse rsp, UpdateRequestProcessor next)
- Specified by:
getInstance
in classUpdateRequestProcessorFactory
-
-