Я пытаюсь разработать свой собственный фильтр на основе https://dzone.com/articles/writing-solr-analysis-filter, но с использованием TokenFilterFactory
, как указано здесь
Я использую Solr 5.5, и для проекта разработки я добавил в свой pom.xml:
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-common</artifactId>
<version>5.5.0</version>
</dependency>
Что касается того, почему я использую версию 5.5 lucene-analyzers-common, причина в том, что я сначала попробовал с solr-core 5.5 и увидел, что нужные мне классы находятся внутри зависимости lucene-analyzers-common версии 5.5.
Мой класс, использующий TokenFilterFactory
:
public class MyNameFilterFactory extends TokenFilterFactory {
Map<String, String> args;
protected MyNameFilterFactory(Map<String, String> args) {
super(args);
}
public Map<String, String> getArgs() {
return args;
}
public void init(Map<String, String> args) {
this.args = args;
}
public MyNameFilter create(TokenStream input) {
return new MyNameFilter(input);
}
}
Я упаковываю проект как толстую банку (иначе я получаю java.lang.ClassNotFoundException: org.apache.lucene.analysis.util.TokenFilterFactory
) и помещаю его в папку solr-5.5.0/server/lib.
Но теперь, когда я запускаю Solr, я получаю другую ошибку, которую я не знаю, как решить, потому что мне кажется, что это внутренняя проблема lucene:
Caused by: java.lang.ClassCastException: class org.apache.lucene.analysis.tr.ApostropheFilterFactory
at java.lang.Class.asSubclass(Class.java:3404)
at org.apache.lucene.util.SPIClassIterator.next(SPIClassIterator.java:158)
at org.apache.lucene.analysis.util.AnalysisSPILoader.reload(AnalysisSPILoader.java:85)
at org.apache.lucene.analysis.util.AnalysisSPILoader.<init>(AnalysisSPILoader.java:65)
at org.apache.lucene.analysis.util.AnalysisSPILoader.<init>(AnalysisSPILoader.java:51)
at org.apache.lucene.analysis.util.TokenFilterFactory.<clinit>(TokenFilterFactory.java:31)
Есть идеи, как это исправить? Есть ли лучший подход к разработке собственного фильтра/токенизатора для Solr?