2011-10-19 57 views
1

我正在嘗試編寫並使用Solr的自定義過濾器。父應用程序是使用太陽黑子寶石的Rails應用程序。Solr找不到自定義過濾器的BaseTokenFilterFactory

我有一個過濾器廠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這些文件,然後做從.class文件.jar文件並將.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

找到了解決辦法:新.jar文件包含自定義分析代碼在solr/lib/目錄應該在Rails的根目錄 ,而不是在售賣的黑子寶石內。這是相同的solr/目錄,裏面的conf/目錄。

0

根據這個帖子有關創建Solr Analysis Filter您還需要包括lucene-core-3.2.0.jar文件中的類路徑中。我相信這是定義類BaseTokenFilterFactory的地方。

我發現了Lucene核心jar文件here,如果你需要它...

+0

我沒有包括在classpath該文件,用'Apache的Solr的核心 - 3.2.0.jar'文件後,一個冒號追加。否則它不會編譯。 –