001package org.xbib.elasticsearch.index.analysis.standardnumber;
002
003import org.apache.lucene.analysis.Analyzer;
004import org.apache.lucene.analysis.TokenStream;
005import org.apache.lucene.analysis.Tokenizer;
006import org.elasticsearch.index.analysis.TokenFilterFactory;
007import org.elasticsearch.index.analysis.TokenizerFactory;
008import org.elasticsearch.index.analysis.UniqueTokenFilterFactory;
009
010import java.io.Reader;
011import java.util.Arrays;
012
013public class StandardNumberAnalyzer extends Analyzer {
014
015    private final TokenizerFactory tokenizerFactory;
016    private final StandardNumberTokenFilterFactory stdnumTokenFilterFactory;
017    private final UniqueTokenFilterFactory uniqueTokenFilterFactory;
018
019    public StandardNumberAnalyzer(TokenizerFactory tokenizerFactory,
020                                  StandardNumberTokenFilterFactory stdnumTokenFilterFactory,
021                                  UniqueTokenFilterFactory uniqueTokenFilterFactory) {
022        this.tokenizerFactory = tokenizerFactory;
023        this.stdnumTokenFilterFactory = stdnumTokenFilterFactory;
024        this.uniqueTokenFilterFactory = uniqueTokenFilterFactory;
025    }
026
027    @Override
028    protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
029        Tokenizer tokenizer = tokenizerFactory.create(reader);
030        TokenStream tokenStream = tokenizer;
031        for (TokenFilterFactory tokenFilter : Arrays.asList(stdnumTokenFilterFactory,uniqueTokenFilterFactory)) {
032            tokenStream = tokenFilter.create(tokenStream);
033        }
034        return new TokenStreamComponents(tokenizer, tokenStream);
035    }
036
037}