blob: e22ad695859906368e72fe5bfa3d27b9c4d56366 [file] [log] [blame]
<?xml version="1.0" ?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!--
Test Config that enumerates many different update processor chain
configurations.
-->
<config>
<luceneMatchVersion>${tests.luceneMatchVersion:LATEST}</luceneMatchVersion>
<xi:include href="solrconfig.snippet.randomindexconfig.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<requestHandler name="/select" class="solr.SearchHandler"></requestHandler>
<requestHandler name="/update" class="solr.UpdateRequestHandler" />
<directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.RAMDirectoryFactory}"/>
<schemaFactory class="ClassicIndexSchemaFactory"/>
<updateRequestProcessorChain name="comprehensive">
<processor class="solr.FieldLengthUpdateProcessorFactory">
<arr name="typeClass">
<str>solr.TrieIntField</str>
<str>solr.TrieLongField</str>
<str>solr.IntPointField</str>
<str>solr.LongPointField</str>
</arr>
</processor>
<processor class="solr.MinFieldValueUpdateProcessorFactory">
<str name="fieldName">min_foo_l</str>
</processor>
<processor class="solr.MaxFieldValueUpdateProcessorFactory">
<str name="fieldName">max_foo_l</str>
</processor>
<processor class="solr.ConcatFieldUpdateProcessorFactory">
<str name="delimiter">; </str>
<lst name="exclude">
<str name="fieldName">primary_author_s1</str>
</lst>
</processor>
<processor class="solr.FirstFieldValueUpdateProcessorFactory">
<str name="fieldName">primary_author_s1</str>
<str name="fieldName">first_foo_l</str>
</processor>
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
<updateRequestProcessorChain name="trim-all">
<!-- no specific src field configs, so all fields should get trimmed -->
<processor class="solr.TrimFieldUpdateProcessorFactory">
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="trim-field">
<processor class="solr.TrimFieldUpdateProcessorFactory">
<str name="fieldName">foo_t</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="trim-most">
<!-- all fields except the exclusions should be trimmed -->
<processor class="solr.TrimFieldUpdateProcessorFactory">
<lst name="exclude">
<str name="fieldName">foo_t</str>
</lst>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="trim-many">
<processor class="solr.TrimFieldUpdateProcessorFactory">
<str name="fieldRegex">foo.*</str>
<str name="fieldRegex">bar.*</str>
<lst name="exclude">
<str name="fieldRegex">.*HOSS.*</str>
</lst>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="trim-few">
<processor class="solr.TrimFieldUpdateProcessorFactory">
<str name="fieldRegex">foo.*</str>
<str name="fieldRegex">bar.*</str>
<!-- each set of exclusions is checked independently -->
<lst name="exclude">
<str name="typeClass">solr.TrieDateField</str>
<str name="typeClass">solr.DatePointField</str>
</lst>
<lst name="exclude">
<str name="fieldRegex">.*HOSS.*</str>
</lst>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="trim-some">
<processor class="solr.TrimFieldUpdateProcessorFactory">
<str name="fieldRegex">foo.*</str>
<str name="fieldRegex">bar.*</str>
<!-- only excluded if it matches all in set -->
<lst name="exclude">
<str name="typeClass">solr.TrieDateField</str>
<str name="fieldRegex">.*HOSS.*</str>
</lst>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="trim-fields">
<processor class="solr.TrimFieldUpdateProcessorFactory">
<str name="fieldName">name</str>
<str name="fieldName">foo_t</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="trim-fields-arr">
<processor class="solr.TrimFieldUpdateProcessorFactory">
<arr name="fieldName">
<str>name</str>
<str>foo_t</str>
</arr>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="trim-field-regexes">
<processor class="solr.TrimFieldUpdateProcessorFactory">
<str name="fieldRegex">foo.*</str>
<str name="fieldRegex">bar.*_s</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="trim-types">
<processor class="solr.TrimFieldUpdateProcessorFactory">
<str name="typeName">nametext</str>
<str name="typeName">text_sw</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="trim-classes">
<processor class="solr.TrimFieldUpdateProcessorFactory">
<str name="typeClass">solr.TrieDateField</str>
<str name="typeClass">solr.DatePointField</str>
<str name="typeClass">solr.StrField</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="trim-multi">
<processor class="solr.TrimFieldUpdateProcessorFactory">
<str name="typeClass">solr.TrieDateField</str>
<str name="typeClass">solr.StrField</str>
<arr name="fieldRegex">
<str>foo.*</str>
</arr>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="remove-all-blanks">
<processor class="solr.RemoveBlankFieldUpdateProcessorFactory">
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="length-none">
<processor class="solr.FieldLengthUpdateProcessorFactory">
<!-- by default, the processor doesn't touch anything -->
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="length-some">
<processor class="solr.FieldLengthUpdateProcessorFactory">
<arr name="fieldRegex">
<str>foo.*</str>
<str>yak.*</str>
</arr>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="concat-defaults">
<processor class="solr.ConcatFieldUpdateProcessorFactory">
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="concat-field">
<processor class="solr.ConcatFieldUpdateProcessorFactory">
<str name="fieldName">foo_s</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="concat-type-delim">
<processor class="solr.ConcatFieldUpdateProcessorFactory">
<str name="typeName">string</str>
<str name="delimiter">; </str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="first-value">
<processor class="solr.FirstFieldValueUpdateProcessorFactory">
<str name="fieldName">foo_s</str>
<str name="fieldName">bar_s</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="last-value">
<processor class="solr.LastFieldValueUpdateProcessorFactory">
<str name="fieldName">foo_s</str>
<str name="fieldName">bar_s</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="min-value">
<processor class="solr.MinFieldValueUpdateProcessorFactory">
<str name="fieldName">foo_i</str>
<str name="fieldName">foo_s</str>
<str name="fieldName">bar_s</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="max-value">
<processor class="solr.MaxFieldValueUpdateProcessorFactory">
<str name="fieldName">foo_i</str>
<str name="fieldName">foo_s</str>
<str name="fieldName">bar_s</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="html-strip">
<processor class="solr.HTMLStripFieldUpdateProcessorFactory">
<str name="fieldName">html_s</str>
</processor>
<processor class="solr.TrimFieldUpdateProcessorFactory"/>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="truncate">
<processor class="solr.TruncateFieldUpdateProcessorFactory">
<str name="fieldName">trunc</str>
<int name="maxLength">5</int>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="count">
<processor class="solr.CountFieldValuesUpdateProcessorFactory">
<str name="fieldName">count_field</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="ignore-not-in-schema">
<processor class="solr.IgnoreFieldUpdateProcessorFactory" />
</updateRequestProcessorChain>
<updateRequestProcessorChain name="ignore-not-in-schema-explicit-selector">
<processor class="solr.IgnoreFieldUpdateProcessorFactory">
<bool name="fieldNameMatchesSchemaField">false</bool>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="ignore-in-schema">
<processor class="solr.IgnoreFieldUpdateProcessorFactory">
<bool name="fieldNameMatchesSchemaField">true</bool>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="ignore-not-in-schema-and-foo-name-prefix">
<processor class="solr.IgnoreFieldUpdateProcessorFactory">
<str name="fieldRegex">foo.*</str>
<bool name="fieldNameMatchesSchemaField">false</bool>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="ignore-foo-name-prefix-except-not-schema">
<processor class="solr.IgnoreFieldUpdateProcessorFactory">
<str name="fieldRegex">foo.*</str>
<lst name="exclude">
<bool name="fieldNameMatchesSchemaField">false</bool>
</lst>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="ignore-not-in-schema-explicit-str-selector">
<processor class="solr.IgnoreFieldUpdateProcessorFactory">
<str name="fieldNameMatchesSchemaField">false</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="ignore-in-schema-str-selector">
<processor class="solr.IgnoreFieldUpdateProcessorFactory">
<str name="fieldNameMatchesSchemaField">true</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="ignore-some">
<processor class="solr.IgnoreFieldUpdateProcessorFactory">
<str name="fieldRegex">.*_raw</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="clone-single">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="source">source1_s</str>
<str name="dest">dest_s</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="clone-single-regex">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="source">source1_s</str>
<lst name="dest">
<str name="pattern">source\d(_s)</str>
<str name="replacement">dest$1</str>
</lst>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="clone-multi">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="source">source1_s</str>
<str name="source">source2_s</str>
<str name="dest">dest_s</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="clone-multi-regex">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="source">source1_s</str>
<str name="source">source2_s</str>
<lst name="dest">
<str name="pattern">source\d(_s)</str>
<str name="replacement">dest$1</str>
</lst>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="clone-array">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<arr name="source">
<str>source1_s</str>
<str>source2_s</str>
</arr>
<str name="dest">dest_s</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="clone-array-regex">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<arr name="source">
<str>source1_s</str>
<str>source2_s</str>
</arr>
<lst name="dest">
<str name="pattern">source\d(_s)</str>
<str name="replacement">dest$1</str>
</lst>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="clone-selector">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<lst name="source">
<str name="fieldRegex">source\d_.*</str>
<lst name="exclude">
<str name="fieldRegex">source0_.*</str>
</lst>
</lst>
<str name="dest">dest_s</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="clone-selector-regex">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<lst name="source">
<str name="fieldRegex">source\d_.*</str>
<lst name="exclude">
<str name="fieldRegex">source0_.*</str>
</lst>
</lst>
<lst name="dest">
<str name="pattern">source\d(_s)</str>
<str name="replacement">dest$1</str>
</lst>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="clone-simple-regex-syntax">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="pattern">source\d_.*</str>
<str name="replacement">dest_s</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="clone-regex-replaceall">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<lst name="source">
<str name="fieldRegex">foo.*</str>
</lst>
<lst name="dest">
<!-- unbounded pattern that can be replaced multiple times in field name -->
<str name="pattern">x(\d)</str>
<str name="replacement">y$1</str>
</lst>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="clone-max-chars">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="source">field1</str>
<str name="dest">toField</str>
</processor>
<processor class="solr.TruncateFieldUpdateProcessorFactory">
<str name="fieldName">toField</str>
<int name="maxLength">3</int>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="clone-move">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="source">field1</str>
<str name="dest">toField</str>
</processor>
<processor class="solr.IgnoreFieldUpdateProcessorFactory">
<str name="fieldName">field1</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="clone-replace">
<processor class="solr.IgnoreFieldUpdateProcessorFactory">
<str name="fieldName">toField</str>
</processor>
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="source">field1</str>
<str name="dest">toField</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="clone-append">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="source">field1</str>
<str name="source">field2</str>
<str name="dest">toField</str>
</processor>
<processor class="solr.ConcatFieldUpdateProcessorFactory">
<str name="delimiter">; </str>
<str name="fieldName">toField</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="clone-first">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="pattern">field(.*)</str>
<str name="replacement">toField</str>
</processor>
<processor class="solr.FirstFieldValueUpdateProcessorFactory">
<str name="fieldName">toField</str>
</processor>
</updateRequestProcessorChain>
<!-- example used in CloneFieldUpdateProcessorFactory javadocs -->
<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>
</lst>
</processor>
<!-- equivalent sugar syntax to above, with slightly diff destination name -->
<processor class="solr.processor.CloneFieldUpdateProcessorFactory">
<str name="pattern">^feat(.*)s$</str>
<str name="replacement">best_feat$1</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="clone-then-count">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="source">category</str>
<str name="dest">category_count</str>
</processor>
<processor class="solr.CountFieldValuesUpdateProcessorFactory">
<str name="fieldName">category_count</str>
</processor>
<processor class="solr.DefaultValueUpdateProcessorFactory">
<str name="fieldName">category_count</str>
<int name="value">0</int>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="regex-replace">
<processor class="solr.RegexReplaceProcessorFactory">
<str name="fieldName">content</str>
<str name="fieldName">title</str>
<str name="pattern">\s+</str>
<str name="replacement">X</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="regex-replace-literal-true">
<processor class="solr.RegexReplaceProcessorFactory">
<str name="fieldName">content</str>
<str name="fieldName">title</str>
<str name="pattern">(try)</str>
<str name="replacement">&lt;$1&gt;</str>
<bool name="literalReplacement">true</bool>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="regex-replace-literal-default-true">
<processor class="solr.RegexReplaceProcessorFactory">
<str name="fieldName">content</str>
<str name="fieldName">title</str>
<str name="pattern">(try)</str>
<str name="replacement">&lt;$1&gt;</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="regex-replace-literal-false">
<processor class="solr.RegexReplaceProcessorFactory">
<str name="fieldName">content</str>
<str name="fieldName">title</str>
<str name="pattern">(try)</str>
<str name="replacement">&lt;$1&gt;</str>
<bool name="literalReplacement">false</bool>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="regex-replace-literal-str-true">
<processor class="solr.RegexReplaceProcessorFactory">
<str name="fieldName">content</str>
<str name="fieldName">title</str>
<str name="pattern">(try)</str>
<str name="replacement">&lt;$1&gt;</str>
<str name="literalReplacement">true</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="default-values">
<processor class="solr.DefaultValueUpdateProcessorFactory">
<str name="fieldName">processor_default_s</str>
<str name="value">X</str>
</processor>
<processor class="solr.DefaultValueUpdateProcessorFactory">
<str name="fieldName">processor_default_i</str>
<int name="value">42</int>
</processor>
<processor class="solr.UUIDUpdateProcessorFactory">
<str name="fieldName">uuid</str>
</processor>
<processor class="solr.TimestampUpdateProcessorFactory">
<str name="fieldName">timestamp</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="default-values-fallback-to-unique">
<processor class="solr.UUIDUpdateProcessorFactory">
<str name="fieldName">id</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="default-values-fallback-to-unique-automatically">
<processor class="solr.UUIDUpdateProcessorFactory">
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="uniq-values">
<processor class="solr.UniqFieldsUpdateProcessorFactory">
<str name="fieldRegex">uniq_.*</str>
</processor>
</updateRequestProcessorChain>
<updateRequestProcessorChain name="pre-analyzed-simple">
<processor class="solr.PreAnalyzedUpdateProcessorFactory">
<str name="fieldName">subject</str>
<str name="fieldName">title</str>
<str name="fieldName">teststop</str>
<str name="fieldName">nonexistent</str>
<str name="fieldName">ssto</str>
<str name="fieldName">sind</str>
<str name="parser">simple</str>
</processor>
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
<updateRequestProcessorChain name="pre-analyzed-json">
<processor class="solr.PreAnalyzedUpdateProcessorFactory">
<str name="fieldName">subject</str>
<str name="fieldName">title</str>
<str name="fieldName">teststop</str>
<str name="fieldName">nonexistent</str>
<str name="fieldName">ssto</str>
<str name="fieldName">sind</str>
<str name="parser">json</str>
</processor>
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
<updateRequestProcessorChain name="ignore-commit-from-client-403">
<processor class="solr.IgnoreCommitOptimizeUpdateProcessorFactory"/>
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
<updateRequestProcessorChain name="ignore-commit-from-client-200">
<processor class="solr.IgnoreCommitOptimizeUpdateProcessorFactory">
<int name="statusCode">200</int>
<str name="responseMessage">Thou shall not issue a commit!</str>
</processor>
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
<updateRequestProcessorChain name="ignore-optimize-only-from-client-403">
<processor class="solr.IgnoreCommitOptimizeUpdateProcessorFactory">
<str name="responseMessage">Thou shall not issue an optimize, but commits are OK!</str>
<bool name="ignoreOptimizeOnly">true</bool>
</processor>
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
<updateRequestProcessorChain name="tolerant-chain-max-errors-10">
<processor class="solr.TolerantUpdateProcessorFactory">
<int name="maxErrors">10</int>
</processor>
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
<updateRequestProcessorChain name="tolerant-chain-max-errors-not-set">
<processor class="solr.TolerantUpdateProcessorFactory"/>
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
<updateRequestProcessorChain name="not-tolerant">
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
</config>