Les filtres de jeton - comme le ASCIIFoldingFilter - sont à leur base un TokenStream, ils sont donc quelque chose que l'analyseur retourne principalement par l'utilisation de la méthode suivante:
public abstract TokenStream tokenStream(String fieldName, Reader reader);
Comme vous l'avez remarqué, les filtres prennent un TokenStream en entrée. Ils agissent comme des wrappers ou, plus exactement, comme decorators à leur entrée. Cela signifie qu'ils améliorent le comportement du TokenStream contenu, exécutant leur opération et le fonctionnement de l'entrée contenue.
Vous pouvez trouver une explication here. Il ne se réfère pas directement à un ASCIIFoldingFilter mais le même principe s'applique. Fondamentalement, vous créez un analyseur personnalisé avec quelque chose comme ça en elle (par exemple dépouillé):
public class CustomAnalyzer extends Analyzer {
// other content omitted
// ...
public TokenStream tokenStream(String fieldName, Reader reader) {
TokenStream result = new StandardTokenizer(reader);
result = new StandardFilter(result);
result = new LowerCaseFilter(result);
// etc etc ...
result = new StopFilter(result, yourSetOfStopWords);
result = new ASCIIFoldingFilter(result);
return result;
}
// ...
}
Les deux TokenFilter et Tokenizer sont sous-classes de TokenStream.
Rappelez-vous aussi que vous devez utiliser le même analyseur personnalisé aussi bien dans l'indexation et la recherche ou vous pourriez obtenir des résultats incorrects dans vos requêtes.