2011-10-19 4 views
1

Solr用のカスタムフィルタを作成して使用しようとしています。親アプリケーションは、Sunspot gemを使用したRailsアプリケーションです。BaseTokenFilterFactoryがカスタムフィルタ付きSolrによって見つかりません

私は 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 { 
    // ... 
    } 
} 

私は.classファイルから.jarファイルを作った後、javac -classpath apache-solr-core-3.2.0.jar:lucene-core-3.2.0.jar myorg/solr/analysis/*.javaでこれらのファイルをコンパイル.jarファイルをSunspotのsolr/lib/ディレクトリに置きます。私は、新しいフィルタ含めるように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 
... 

は、これは私が新しいフィルタコードをコンパイルする方法に問題があり、右?実行時に適切なクラスが見つかるようにコンパイルするにはどうしたらいいですか?

答えて

1

見つかりソリューション:Railsのルートディレクトリにsolr/lib/ディレクトリに行くべきカスタム解析コードを含む新しい.jarファイル販売されたSunspotの宝石の中ではない。これは、conf/ディレクトリを格納する同じsolr/ディレクトリです。

0

この投稿によると、Solr Analysis Filterの作成については、lucene-core-3.2.0.jarファイルをクラスパスに含める必要があります。私はこれがクラスBaseTokenFilterFactoryが定義されている場所だと信じています。私はあなたがそれを必要とする場合はLuceneコアジャーがhereのファイルが見つから

...

+0

私はクラスパスにそのファイルを含め、 'apache-solr-core-3.2.0.jar'ファイルの後にコロンを付けました。そうでなければ、それはまとめられていないでしょう。 –

関連する問題