org.apache.solr.update.processor

Class CloneFieldUpdateProcessorFactory

  • All Implemented Interfaces:
    NamedListInitializedPlugin, SolrCoreAware


    public class CloneFieldUpdateProcessorFactory
    extends UpdateRequestProcessorFactory
    implements SolrCoreAware
    Clones the values found in any matching source field into a configured dest field.

    The source field(s) can be configured as either:

    The dest field can be a single <str> containing the literal name of a destination field, or it may be a <lst> specifying a regex pattern and a replacement 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 using Matcher.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 the source fields will be added to it. The "boost" value associated with the dest will not be changed, and any boost specified on the source fields will be ignored. (If the dest field did not exist prior to this processor, the newly created dest field will have the default boost of 1.0)

    In the example below:

    • The category field will be cloned into the category_s field
    • Both the authors and editors fields will be cloned into the contributors field
    • Any field with a name ending in _price -- except for list_price -- will be cloned into the all_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 destination pattern, a "short hand" syntax is support for convinience: The pattern and replacement may be specified at the top level, omitting source and dest declarations completely, and the pattern will be used to construct an equivilent source selector internally.

    For example, both of the following configurations are equivilent:

     <!-- 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 the CloneFieldUpdateProcessorFactory can be useful to reduce the list of values down to a single value.

    See Also:
    FieldValueSubsetUpdateProcessorFactory