01: /*
02: * Copyright 2004-2006 the original author or authors.
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */
16:
17: package org.compass.core.lucene.engine.analyzer.synonym;
18:
19: import org.apache.lucene.analysis.TokenFilter;
20: import org.apache.lucene.analysis.TokenStream;
21: import org.compass.core.CompassException;
22: import org.compass.core.config.CompassSettings;
23: import org.compass.core.engine.SearchEngineException;
24: import org.compass.core.lucene.LuceneEnvironment;
25: import org.compass.core.lucene.engine.analyzer.LuceneAnalyzerTokenFilterProvider;
26: import org.compass.core.util.ClassUtils;
27:
28: /**
29: * A synonym analyzer token filter provider. Uses the {@link SynonymFilter}
30: * to return synonyms. The {@link SynonymFilter} in turn uses the {@link SynonymLookupProvider}
31: * which should be provided in order to lookup synonyms for a given value.
32: *
33: * @author kimchy
34: * @see SynonymFilter
35: * @see SynonymLookupProvider
36: */
37: public class SynonymAnalyzerTokenFilterProvider implements
38: LuceneAnalyzerTokenFilterProvider {
39:
40: private SynonymLookupProvider synonymLookupProvider;
41:
42: public void configure(CompassSettings settings)
43: throws CompassException {
44: String lookupProviderClassName = settings
45: .getSetting(LuceneEnvironment.AnalyzerFilter.Synonym.LOOKUP);
46: if (lookupProviderClassName == null) {
47: throw new SearchEngineException(
48: "Failed to locate synonym lookup provider, verify that you set the ["
49: + LuceneEnvironment.AnalyzerFilter.Synonym.LOOKUP
50: + "] setting for the group");
51: }
52: try {
53: synonymLookupProvider = (SynonymLookupProvider) ClassUtils
54: .forName(lookupProviderClassName,
55: settings.getClassLoader()).newInstance();
56: } catch (Exception e) {
57: throw new SearchEngineException(
58: "Failed to create lookup synonym provider ["
59: + lookupProviderClassName + "]", e);
60: }
61: synonymLookupProvider.configure(settings);
62: }
63:
64: public TokenFilter createTokenFilter(TokenStream tokenStream) {
65: return new SynonymFilter(tokenStream, synonymLookupProvider);
66: }
67:
68: }
|