org.apache.lucene.analysis.miscellaneous

## Class ProtectedTermFilterFactory

- java.lang.Object
- - org.apache.lucene.analysis.util.AbstractAnalysisFactory
  - - org.apache.lucene.analysis.util.TokenFilterFactory
    - - org.apache.lucene.analysis.miscellaneous.ConditionalTokenFilterFactory
      - - org.apache.lucene.analysis.miscellaneous.ProtectedTermFilterFactory

- All Implemented Interfaces:
    ResourceLoaderAware

      public class ProtectedTermFilterFactory
      extends ConditionalTokenFilterFactory
      implements ResourceLoaderAware

  Factory for a `ProtectedTermFilter`

  CustomAnalyzer example:

       Analyzer ana = CustomAnalyzer.builder()
         .withTokenizer("standard")
         .when("protectedterm", "ignoreCase", "true", "protected", "protectedTerms.txt")
           .addTokenFilter("truncate", "prefixLength", "4")
           .addTokenFilter("lowercase")
         .endwhen()
         .build();

  Solr example, in which conditional filters are specified via the `wrappedFilters` parameter - a comma-separated list of case-insensitive TokenFilter SPI names - and conditional filter args are specified via `filterName.argName` parameters:

       <fieldType name="reverse_lower_with_exceptions" class="solr.TextField" positionIncrementGap="100">
         <analyzer>
           <tokenizer class="solr.WhitespaceTokenizerFactory"/>
           <filter class="solr.ProtectedTermFilterFactory" ignoreCase="true" protected="protectedTerms.txt"
                   wrappedFilters="truncate,lowercase" truncate.prefixLength="4" />
         </analyzer>
       </fieldType>

  When using the `wrappedFilters` parameter, each filter name must be unique, so if you need to specify the same filter more than once, you must add case-insensitive unique '-id' suffixes (note that the '-id' suffix is stripped prior to SPI lookup), e.g.:

       <fieldType name="double_synonym_with_exceptions" class="solr.TextField" positionIncrementGap="100">
         <analyzer>
           <tokenizer class="solr.WhitespaceTokenizerFactory"/>
           <filter class="solr.ProtectedTermFilterFactory" ignoreCase="true" protected="protectedTerms.txt"
                   wrappedFilters="synonymgraph-A,synonymgraph-B"
                   synonymgraph-A.synonyms="synonyms-1.txt"
                   synonymgraph-B.synonyms="synonyms-2.txt"/>
         </analyzer>
       </fieldType>

  See related `CustomAnalyzer.Builder.whenTerm(Predicate)`

  Since:
    7.4.0

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static char` | `FILTER_ARG_SEPARATOR`
    `static char` | `FILTER_NAME_ID_SEPARATOR`
    `static String` | `PROTECTED_TERMS`

    - ### Fields inherited from class org.apache.lucene.analysis.util.AbstractAnalysisFactory

      `LUCENE_MATCH_VERSION_PARAM, luceneMatchVersion`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ProtectedTermFilterFactory(Map<String,String> args)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected ConditionalTokenFilter` | `create(TokenStream input, Function<TokenStream,TokenStream> inner)` Modify the incoming `TokenStream` with a `ConditionalTokenFilter`
    `void` | `doInform(ResourceLoader loader)` Initialises this component with the corresponding `ResourceLoader`
    `CharArraySet` | `getProtectedTerms()`
    `boolean` | `isIgnoreCase()`

    - ### Methods inherited from class org.apache.lucene.analysis.miscellaneous.ConditionalTokenFilterFactory

      `create, inform, setInnerFilters`

    - ### Methods inherited from class org.apache.lucene.analysis.util.TokenFilterFactory

      `availableTokenFilters, forName, lookupClass, reloadTokenFilters`

    - ### Methods inherited from class org.apache.lucene.analysis.util.AbstractAnalysisFactory

      `get, get, get, get, get, getBoolean, getChar, getClassArg, getFloat, getInt, getLines, getLuceneMatchVersion, getOriginalArgs, getPattern, getSet, getSnowballWordSet, getWordSet, isExplicitLuceneMatchVersion, require, require, require, requireBoolean, requireChar, requireFloat, requireInt, setExplicitLuceneMatchVersion, splitAt, splitFileNames`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface org.apache.lucene.analysis.util.ResourceLoaderAware

      `inform`

- - ### Field Detail

    - #### PROTECTED_TERMS

          public static final String PROTECTED_TERMS

      See Also:
        Constant Field Values

    - #### FILTER_ARG_SEPARATOR

          public static final char FILTER_ARG_SEPARATOR

      See Also:
        Constant Field Values

    - #### FILTER_NAME_ID_SEPARATOR

          public static final char FILTER_NAME_ID_SEPARATOR

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### ProtectedTermFilterFactory

          public ProtectedTermFilterFactory(Map<String,String> args)

  - ### Method Detail

    - #### isIgnoreCase

          public boolean isIgnoreCase()

    - #### getProtectedTerms

          public CharArraySet getProtectedTerms()

    - #### create

          protected ConditionalTokenFilter create(TokenStream input,
                                                  Function<TokenStream,TokenStream> inner)

      Description copied from class: `ConditionalTokenFilterFactory`
      Modify the incoming `TokenStream` with a `ConditionalTokenFilter`
      Specified by:
        `create` in class `ConditionalTokenFilterFactory`

    - #### doInform

          public void doInform(ResourceLoader loader)
                        throws IOException

      Description copied from class: `ConditionalTokenFilterFactory`
      Initialises this component with the corresponding `ResourceLoader`
      Overrides:
        `doInform` in class `ConditionalTokenFilterFactory`
      Throws:
        `IOException`

Copyright © 2000-2019 Apache Software Foundation. All Rights Reserved.