001
014
015 package com.liferay.portal.search.lucene;
016
017 import java.io.IOException;
018 import java.io.Reader;
019
020 import java.util.HashMap;
021 import java.util.Map;
022 import java.util.regex.Pattern;
023
024 import org.apache.lucene.analysis.Analyzer;
025 import org.apache.lucene.analysis.TokenStream;
026 import org.apache.lucene.document.Fieldable;
027
028
031 public class PerFieldAnalyzerWrapper
032 extends org.apache.lucene.analysis.PerFieldAnalyzerWrapper {
033
034 public PerFieldAnalyzerWrapper(
035 Analyzer defaultAnalyzer, Map<String, Analyzer> analyzerMap) {
036
037 super(defaultAnalyzer, analyzerMap);
038
039 _analyzer = defaultAnalyzer;
040 _analyzers = analyzerMap;
041 }
042
043 @Override
044 public void addAnalyzer(String fieldName, Analyzer analyzer) {
045 super.addAnalyzer(fieldName, analyzer);
046
047 _analyzers.put(fieldName, analyzer);
048 }
049
050 public Analyzer getAnalyzer(String fieldName) {
051 Analyzer analyzer = _analyzers.get(fieldName);
052
053 if (analyzer != null) {
054 return analyzer;
055 }
056
057 for (String key : _analyzers.keySet()) {
058 if (Pattern.matches(key, fieldName)) {
059 return _analyzers.get(key);
060 }
061 }
062
063 return _analyzer;
064 }
065
066 @Override
067 public int getOffsetGap(Fieldable field) {
068 Analyzer analyzer = getAnalyzer(field.name());
069
070 return analyzer.getOffsetGap(field);
071 }
072
073 @Override
074 public int getPositionIncrementGap(String fieldName) {
075 Analyzer analyzer = getAnalyzer(fieldName);
076
077 return analyzer.getPositionIncrementGap(fieldName);
078 }
079
080 @Override
081 public TokenStream reusableTokenStream(String fieldName, Reader reader)
082 throws IOException {
083
084 Analyzer analyzer = getAnalyzer(fieldName);
085
086 return analyzer.reusableTokenStream(fieldName, reader);
087 }
088
089 @Override
090 public TokenStream tokenStream(String fieldName, Reader reader) {
091 Analyzer analyzer = getAnalyzer(fieldName);
092
093 return analyzer.tokenStream(fieldName, reader);
094 }
095
096 private Analyzer _analyzer;
097 private Map<String, Analyzer> _analyzers = new HashMap<String, Analyzer>();
098
099 }