BaseTokenFilterFactory не найден Solr с пользовательским фильтром - PullRequest
1 голос
/ 20 октября 2011

Я пытаюсь написать и использовать собственный фильтр для Solr. Родительское приложение - это приложение Rails, использующее гем Sunspot.

У меня есть фабрика фильтров в myorg/solr/analysis/TestThingFilterFactory.java:

package myorg.solr.analysis;

import org.apache.lucene.analysis.TokenStream;
import org.apache.solr.analysis.BaseTokenFilterFactory;
import myorg.solr.analysis.TestThingFilter;

public class TestThingFilterFactory extends BaseTokenFilterFactory {
  public TestThingFilter create(TokenStream input) {
    return new TestThingFilter(input);
  }
}

и фильтр в myorg/solr/analysis/TestThingFilter.java:

package myorg.solr.analysis;

import java.io.IOException;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenFilter;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;

public class TestThingFilter extends TokenFilter {
  public TestThingFilter(TokenStream input) {
    super(input);
  }

  public boolean incrementToken() throws IOException {
    // ...
  }
}

Я скомпилировал эти файлы с помощью javac -classpath apache-solr-core-3.2.0.jar:lucene-core-3.2.0.jar myorg/solr/analysis/*.java, затем создал файл .jar из файлов .class и поместил файл .jar в каталог solr/lib/ Sunspot. Я изменил Solr schema.xml, чтобы включить новый фильтр:

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="myorg.solr.analysis.TestThingFilterFactory"/>
  </analyzer>
</fieldType>

Перезапуск Solr и попытка переиндексации приводит к появлению этой ошибки в журналах:

SEVERE: java.lang.NoClassDefFoundError: org/apache/solr/analysis/BaseTokenFilterFactory
...
Caused by: java.lang.ClassNotFoundException: org.apache.solr.analysis.BaseTokenFilterFactory
...

Это проблема с тем, как я скомпилировал новый код фильтра, верно? Как мне скомпилировать, чтобы он мог найти нужные классы во время выполнения?

Ответы [ 2 ]

1 голос
/ 28 октября 2011

Нашел решение: новый файл .jar, содержащий пользовательский код анализа, должен находиться в каталоге solr/lib/ в корневом каталоге Rails , а не в продаваемом гем Sunspot.Это тот же каталог solr/, в котором находится каталог conf/.

0 голосов
/ 20 октября 2011

Согласно этому сообщению о создании Solr Analysis Filter вам также необходимо включить файл lucene-core-3.2.0.jar в ваш путь к классам.Я считаю, что именно здесь определен класс BaseTokenFilterFactory.

Я нашел файл jar с ядром lucene-core здесь , если вам это нужно ...

...