/** * */ package querqy.lucene.contrib.rewrite; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.text.ParseException; import java.util.Map; import java.util.Set; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.LowerCaseFilter; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.Tokenizer; import org.apache.lucene.analysis.core.KeywordTokenizer; import org.apache.lucene.analysis.synonym.SolrSynonymParser; import org.apache.lucene.analysis.synonym.SynonymMap; import querqy.model.ExpandedQuery; import querqy.model.Term; import querqy.rewrite.QueryRewriter; import querqy.rewrite.RewriterFactory; /** * @author rene * */ public class LuceneSynonymsRewriterFactory implements RewriterFactory { @Override public QueryRewriter createRewriter(ExpandedQuery input, Map<String, ?> context) { return new LuceneSynonymsRewriter(synonymMap); } SynonymMap synonymMap = null; final SolrSynonymParser parser; public LuceneSynonymsRewriterFactory(boolean expand, final boolean ignoreCase) throws IOException { Analyzer analyzer = new Analyzer() { @Override protected TokenStreamComponents createComponents(String fieldName) { Tokenizer tokenizer = new KeywordTokenizer(); TokenStream stream = tokenizer; if (ignoreCase) { stream = new LowerCaseFilter(stream); } return new TokenStreamComponents(tokenizer, stream); } }; parser = new SolrSynonymParser(true, expand, analyzer); } public void addResource(InputStream is) throws IOException { try { parser.parse(new InputStreamReader(is)); } catch (ParseException e) { throw new IOException(e); } } public void build() throws IOException { synonymMap = parser.build(); } @Override public Set<Term> getGenerableTerms() { return QueryRewriter.EMPTY_GENERABLE_TERMS; } }