TaxonomyAnalysisConfigurer.java
package com.taxonomy.shared.config;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.de.GermanAnalyzer;
import org.apache.lucene.analysis.en.EnglishAnalyzer;
import org.apache.lucene.analysis.miscellaneous.PerFieldAnalyzerWrapper;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import java.util.LinkedHashMap;
import java.util.Map;
import com.taxonomy.catalog.service.SearchService;
/**
* Provides Lucene analyzers for English and German full-text fields.
* Used by {@link com.taxonomy.catalog.service.SearchService} to configure per-field analysis.
*/
public class TaxonomyAnalysisConfigurer {
public static final String ANALYZER_ENGLISH = "english";
public static final String ANALYZER_GERMAN = "german";
/**
* Build a per-field {@link Analyzer} that applies:
* <ul>
* <li>{@link EnglishAnalyzer} for fields whose name ends with "En"</li>
* <li>{@link GermanAnalyzer} for fields whose name ends with "De"</li>
* <li>{@link StandardAnalyzer} for all other fields</li>
* </ul>
*
* @param enFields field names that should use the English analyzer
* @param deFields field names that should use the German analyzer
* @return configured {@link PerFieldAnalyzerWrapper}
*/
public static Analyzer buildPerFieldAnalyzer(String[] enFields, String[] deFields) {
Map<String, Analyzer> fieldAnalyzers = new LinkedHashMap<>();
for (String f : enFields) {
fieldAnalyzers.put(f, new EnglishAnalyzer());
}
for (String f : deFields) {
fieldAnalyzers.put(f, new GermanAnalyzer());
}
return new PerFieldAnalyzerWrapper(new StandardAnalyzer(), fieldAnalyzers);
}
}