Hello,
I would like to create my custom analyzer equivalent to this definition:
Code:
@AnalyzerDef(name = "mysynonyms",
tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),
filters = {
@TokenFilterDef(factory = SynonymFilterFactory.class,
params = {
@Parameter(name = "synonyms", value = "mysynonyms.TXT"),
@Parameter(name = "ignoreCase", value = "true"),
@Parameter(name = "expand", value = "true") }),
@TokenFilterDef(factory = LowerCaseFilterFactory.class),
@TokenFilterDef(factory = ASCIIFoldingFilterFactory.class),
@TokenFilterDef(factory = SnowballPorterFilterFactory.class,
params = @Parameter(name="language", value="Slovenian"))
})
I know how to create custom analyzers in Lucene, I am just fighting how to include SynonymFilterFactory into the top of the filter chain and how to pass the 3 parameters (synonyms, ignoreCase and expand).
So far...
Code:
import java.io.Reader;
import org.apache.lucene.analysis.ASCIIFoldingFilter;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.LowerCaseFilter;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.snowball.SnowballFilter;
import org.apache.lucene.analysis.standard.StandardFilter;
import org.apache.lucene.analysis.standard.StandardTokenizer;
import org.apache.lucene.util.Version;
import org.apache.solr.analysis.SynonymFilter;
import org.apache.solr.analysis.SynonymMap;
public class PorterWithSynonymsAnalyzer extends Analyzer {
private String language;
private SynonymMap synonymMap;
public PorterWithSynonymsAnalyzer(String language) {
super();
this.language = language;
boolean ignoreCase = true;
synonymMap = new SynonymMap(ignoreCase);
}
@Override
public TokenStream tokenStream(String fieldName, Reader reader) {
return new SynonymFilter(
new StandardFilter(
new LowerCaseFilter(
new ASCIIFoldingFilter(
new SnowballFilter(new StandardTokenizer(Version.LUCENE_29, reader), language)
)
)
), synonymMap
);
}
}
I need the custom analyzer so I can dynamicaly set, via some application configuration parameters, the parameters for the filters.
-bob