@Override
    public TokenStream reusableTokenStream(String fieldName, Reader reader) throws IOException {
      class SavedStreams {
        StandardTokenizer tokenStream;
        TokenStream filteredTokenStream;
      }

      SavedStreams streams = (SavedStreams) getPreviousTokenStream();
      if (streams == null) {
        streams = new SavedStreams();
        setPreviousTokenStream(streams);
        streams.tokenStream = new StandardTokenizer(LUCENE_VERSION, reader);
        streams.filteredTokenStream = new StandardFilter(streams.tokenStream);
        streams.filteredTokenStream = new LowerCaseFilter(streams.filteredTokenStream);
        streams.filteredTokenStream =
            new StopFilter(true, streams.filteredTokenStream, STOP_WORDS_SET);
        streams.filteredTokenStream = new ASCIIFoldingFilter(streams.filteredTokenStream);
      } else {
        streams.tokenStream.reset(reader);
      }
      streams.tokenStream.setMaxTokenLength(DEFAULT_MAX_TOKEN_LENGTH);

      return streams.filteredTokenStream;
    }