package org.xbib.elasticsearch.index.analysis.hyphen; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.env.Environment; import org.elasticsearch.index.IndexSettings; import org.elasticsearch.index.analysis.CharFilterFactory; import org.elasticsearch.index.analysis.CustomAnalyzer; import org.elasticsearch.index.analysis.CustomAnalyzerProvider; import org.elasticsearch.index.analysis.TokenFilterFactory; import org.elasticsearch.index.analysis.TokenizerFactory; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * A Hyphen analyzer provider. */ public class HyphenAnalyzerProvider extends CustomAnalyzerProvider { private final Settings analyzerSettings; private final HyphenTokenizerFactory tokenizerFactory; private final HyphenTokenFilterFactory tokenFilterFactory; private CustomAnalyzer customAnalyzer; public HyphenAnalyzerProvider(IndexSettings indexSettings, Environment environment, String name, Settings settings) { super(indexSettings, name, settings); this.tokenizerFactory = new HyphenTokenizerFactory(indexSettings, environment, name, settings); this.tokenFilterFactory = new HyphenTokenFilterFactory(indexSettings, environment, name, settings); this.analyzerSettings = settings; } @Override public void build(final Map<String, TokenizerFactory> tokenizers, final Map<String, CharFilterFactory> charFilters, final Map<String, TokenFilterFactory> tokenFilters) { List<CharFilterFactory> myCharFilters = new ArrayList<>(); String[] charFilterNames = analyzerSettings.getAsArray("char_filter"); for (String charFilterName : charFilterNames) { CharFilterFactory charFilter = charFilters.get(charFilterName); if (charFilter == null) { throw new IllegalArgumentException("hyphen analyzer [" + name() + "] failed to find char_filter under name [" + charFilterName + "]"); } myCharFilters.add(charFilter); } List<TokenFilterFactory> myTokenFilters = new ArrayList<>(); myTokenFilters.add(tokenFilterFactory); String[] tokenFilterNames = analyzerSettings.getAsArray("filter"); for (String tokenFilterName : tokenFilterNames) { TokenFilterFactory tokenFilter = tokenFilters.get(tokenFilterName); if (tokenFilter == null) { throw new IllegalArgumentException("hyphen analyzer [" + name() + "] failed to find filter under name [" + tokenFilterName + "]"); } myTokenFilters.add(tokenFilter); } int positionOffsetGap = analyzerSettings.getAsInt("position_offset_gap", 0); int offsetGap = analyzerSettings.getAsInt("offset_gap", -1); this.customAnalyzer = new CustomAnalyzer(tokenizerFactory, myCharFilters.toArray(new CharFilterFactory[myCharFilters.size()]), myTokenFilters.toArray(new TokenFilterFactory[myTokenFilters.size()]), positionOffsetGap, offsetGap ); } @Override public CustomAnalyzer get() { return this.customAnalyzer; } }