2

サンプルのカスタム フィルターを Solr に実装し、次のようにインデックス分析フェーズでフィルターを使用するように fieldtype:contentType を構成しました。

<fieldType name="contentType" class="solr.TextField">
    <analyzer type="index">
      <tokenizer class="solr.KeywordTokenizerFactory"/>
      <filter class="com.solr.test.analyzer.ContentFilterFactory"/>
    </analyzer>
</fieldType>

以下は、私のカスタム Filter ファクトリ クラスです。

public class ContentFilterFactory extends TokenFilterFactory {

    public ContentFilterFactory() {
        super();
    }

    @Override
    public TokenStream create(TokenStream input) {
        return new ContentFilter(input);
    }

}

Solr 4.5.0 サーバーを起動すると、ContentFilterFactory インスタンスのロード時に以下のエラーが発生します。根本的な原因は、 java.lang.NoSuchMethodException: com.solr.test.analyzer.ContentFilterFactory.(java.util.Map) です。

FilterFactory に init() メソッドを含める必要がありますか? もしそうなら、私はそれに何を含めるべきですか?誰かがこのエラーを解決するのを手伝ってくれますか?

   Caused by: org.apache.solr.common.SolrException: Plugin init failure for [schema.xml] analyzer/filter: Error instantiating class: 'com.solr.test.analyzer.ContentFilterFactory'
    at org.apache.solr.util.plugin.AbstractPluginLoader.load(AbstractPluginLoader.java:177)
    at org.apache.solr.schema.FieldTypePluginLoader.readAnalyzer(FieldTypePluginLoader.java:400)
    at org.apache.solr.schema.FieldTypePluginLoader.create(FieldTypePluginLoader.java:95)
    at org.apache.solr.schema.FieldTypePluginLoader.create(FieldTypePluginLoader.java:43)
    at org.apache.solr.util.plugin.AbstractPluginLoader.load(AbstractPluginLoader.java:151)
    ... 14 more
Caused by: org.apache.solr.common.SolrException: Error instantiating class: 'com.solr.test.analyzer.ContentFilterFactory'
    at org.apache.solr.core.SolrResourceLoader.newInstance(SolrResourceLoader.java:556)
    at org.apache.solr.schema.FieldTypePluginLoader$3.create(FieldTypePluginLoader.java:382)
    at org.apache.solr.schema.FieldTypePluginLoader$3.create(FieldTypePluginLoader.java:376)
    at org.apache.solr.util.plugin.AbstractPluginLoader.load(AbstractPluginLoader.java:151)
    ... 18 more
Caused by: java.lang.NoSuchMethodException: com.solr.test.analyzer.ContentFilterFactory.<init>(java.util.Map)
    at java.lang.Class.getConstructor0(Class.java:2810)
    at java.lang.Class.getConstructor(Class.java:1718)
    at org.apache.solr.core.SolrResourceLoader.newInstance(SolrResourceLoader.java:552)
    ... 21 more
4

1 に答える 1

5

TokenFilterFactoryの Javadoc を見ると、コンストラクターはMap<String,String>引数を取ります。ContentFilterFactoryコンストラクターを次のように更新してみてください。

public ContentFilterFactory(Map<String, String> args) {
  super(args);
}
于 2013-11-07T20:10:27.123 に答える