Package org.apache.lucene.analysis.miscellaneous

# Class ProtectedTermFilterFactory

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

All Implemented Interfaces:
  `ResourceLoaderAware`

public class ProtectedTermFilterFactory extends ConditionalTokenFilterFactory
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
SPI Name (case-insensitive: if the name is 'htmlStrip', 'htmlstrip' can be used when looking up the service).
  "protectedTerm"

## Field Summary

Fields
Modifier and Type
Field
Description
`static final char`
`FILTER_ARG_SEPARATOR`
`static final char`
`FILTER_NAME_ID_SEPARATOR`
`static final String`
`NAME`
`static final String`
`PROTECTED_TERMS`

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

`LUCENE_MATCH_VERSION_PARAM, luceneMatchVersion`

## Constructor Summary

Constructors
Constructor
Description
`ProtectedTermFilterFactory()`
Default ctor for compatibility with SPI
`ProtectedTermFilterFactory(Map<String,String> args)`

## Method Summary

Modifier and Type
Method
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.TokenFilterFactory

`availableTokenFilters, findSPIName, forName, lookupClass, normalize, reloadTokenFilters`

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

`defaultCtorException, 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`

## Field Details

### NAME

public static final String NAME

See Also:
  - Constant Field Values

### 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 Details

### ProtectedTermFilterFactory

public ProtectedTermFilterFactory(Map<String,String> args)

### ProtectedTermFilterFactory

public ProtectedTermFilterFactory()
Default ctor for compatibility with SPI

## Method Details

### 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`