package com.orientechnologies.lucene.analyzer; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.DelegatingAnalyzerWrapper; import org.apache.lucene.analysis.core.KeywordAnalyzer; import java.util.HashMap; import java.util.Map; import static com.orientechnologies.lucene.engine.OLuceneIndexEngineAbstract.*; /** * Created by frank on 10/12/15. */ public class OLucenePerFieldAnalyzerWrapper extends DelegatingAnalyzerWrapper { private final Analyzer defaultAnalyzer; private final Map<String, Analyzer> fieldAnalyzers; /** * Constructs with default analyzer. * * @param defaultAnalyzer * Any fields not specifically defined to use a different analyzer will use the one provided here. */ public OLucenePerFieldAnalyzerWrapper(Analyzer defaultAnalyzer) { this(defaultAnalyzer, new HashMap<String, Analyzer>()); } /** * Constructs with default analyzer and a map of analyzers to use for specific fields. * * @param defaultAnalyzer * Any fields not specifically defined to use a different analyzer will use the one provided here. * @param fieldAnalyzers * a Map (String field name to the Analyzer) to be used for those fields */ public OLucenePerFieldAnalyzerWrapper(Analyzer defaultAnalyzer, Map<String, Analyzer> fieldAnalyzers) { super(PER_FIELD_REUSE_STRATEGY); this.defaultAnalyzer = defaultAnalyzer; this.fieldAnalyzers = new HashMap<String, Analyzer>(); this.fieldAnalyzers.putAll(fieldAnalyzers); this.fieldAnalyzers.put(RID, new KeywordAnalyzer()); this.fieldAnalyzers.put("_CLASS", new KeywordAnalyzer()); } @Override protected Analyzer getWrappedAnalyzer(String fieldName) { Analyzer analyzer = fieldAnalyzers.get(fieldName); return (analyzer != null) ? analyzer : defaultAnalyzer; } @Override public String toString() { return "PerFieldAnalyzerWrapper(" + fieldAnalyzers + ", default=" + defaultAnalyzer + ")"; } public OLucenePerFieldAnalyzerWrapper add(String field, Analyzer analyzer) { fieldAnalyzers.put(field, analyzer); return this; } public OLucenePerFieldAnalyzerWrapper add(OLucenePerFieldAnalyzerWrapper analyzer) { fieldAnalyzers.putAll(analyzer.getAnalyzers()); return this; } protected Map<String, Analyzer> getAnalyzers() { return fieldAnalyzers; } public OLucenePerFieldAnalyzerWrapper remove(String field) { fieldAnalyzers.remove(field); return this; } }