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 @Override
051 public int getOffsetGap(Fieldable field) {
052 Analyzer analyzer = _getAnalyzer(field.name());
053
054 return analyzer.getOffsetGap(field);
055 }
056
057 @Override
058 public int getPositionIncrementGap(String fieldName) {
059 Analyzer analyzer = _getAnalyzer(fieldName);
060
061 return analyzer.getPositionIncrementGap(fieldName);
062 }
063
064 @Override
065 public TokenStream reusableTokenStream(String fieldName, Reader reader)
066 throws IOException {
067
068 Analyzer analyzer = _getAnalyzer(fieldName);
069
070 return analyzer.reusableTokenStream(fieldName, reader);
071 }
072
073 @Override
074 public TokenStream tokenStream(String fieldName, Reader reader) {
075 Analyzer analyzer = _getAnalyzer(fieldName);
076
077 return analyzer.tokenStream(fieldName, reader);
078 }
079
080 private Analyzer _getAnalyzer(String fieldName) {
081 Analyzer analyzer = _analyzers.get(fieldName);
082
083 if (analyzer != null) {
084 return analyzer;
085 }
086
087 for (String key : _analyzers.keySet()) {
088 if (Pattern.matches(key, fieldName)) {
089 return _analyzers.get(key);
090 }
091 }
092
093 return _analyzer;
094 }
095
096 private Analyzer _analyzer;
097 private Map<String, Analyzer> _analyzers = new HashMap<String, Analyzer>();
098
099 }