0

Nutch のクロールを solr にインデックス付けしようとしていますが、コマンド ラインからではなく、ソース コード内で行います。

次の関数を作成しました

public static int runInjectSolr(String[] args, Properties prop) throws Exception{       
    String solrUrl = "http://ec2-X-X-X-X.compute-1.amazonaws.com/solr/collection1";

    String crawldb = JobBase.getParam(args,"crawldb", null, true);
    String segments = JobBase.getParam(args,"segments", null, true);
    String args2[] = {crawldb, segments};

    Configuration conf = new Configuration();
    conf.set("-D solr.server.url",solrUrl);
    int code = ToolRunner.run(NutchConfiguration.create(),
            new IndexingJob(conf), args2);
    return code;
}

しかし、次のエラーが表示されます。

2013-08-07 19:37:13,338 ERROR org.apache.nutch.indexwriter.solr.SolrIndexWriter (main): Missing SOLR URL. Should be set via -D solr.server.url 
SOLRIndexWriter
solr.server.url : URL of the SOLR instance (mandatory)
solr.commit.size : buffer size when sending to SOLR (default 1000)
solr.mapping.file : name of the mapping file for fields (default solrindex-mapping.xml)
solr.auth : use authentication (default false)
solr.auth.username : use authentication (default false)
solr.auth : username for authentication
solr.auth.password : password for authentication

したがって、構成を正しく作成していないと想定しています。助言がありますか?

または、構成フィールドを別の方法で run に渡す必要がありますか? 使ってないかも

NutchConfiguration.create()
4

1 に答える 1

1

コードには 2 つの問題があります。

  1. solr.server.url-D オプションを使用せずに、構成オブジェクトに直接設定する必要があります。ナッチによって与えられたメッセージは、コマンドラインからの実行を想定しており、ここでは誤解を招きます。
  2. 前述のとおり、2 つの異なる構成インスタンスを渡しています。これNutchConfiguration.create()により、内部で Hadoop 構成が作成され、それにいくつかのナット固有のリソースが追加されるため、自分で作成する必要はありません。また、ToolRunner は conf オブジェクトを IndexingJob に渡すため、コンストラクターで渡す必要はありません。

したがって、正しいコードは次のとおりです。

Configuration conf = NutchConfiguration.create();
conf.set("solr.server.url", solrUrl);
ToolRunner.run(conf, new IndexingJob(), args2);
于 2013-08-09T10:34:13.150 に答える