Solr自定义UpdateRequestProcessorFactory

时间:2014-12-23 01:19:05

标签: java solr requesthandler

我被这个问题困扰了。我编写了一个自定义的UpdateRequestProcessorFactory。代码是:

package mira;
import java.io.IOException;

 import org.apache.solr.common.SolrInputDocument;
  import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.update.AddUpdateCommand;
import org.apache.solr.update.processor.UpdateRequestProcessor;
    import org.apache.solr.update.processor.UpdateRequestProcessorFactory;

   public class MaProcessorFactory extends UpdateRequestProcessorFactory
  {
    @Override
    public UpdateRequestProcessor getInstance(SolrQueryRequest req, SolrQueryResponse  rsp,      UpdateRequestProcessor next)
   {
     return new MaProcessor(next);
    }
  }

 class MaProcessor extends UpdateRequestProcessor
  {
    public MaProcessor( UpdateRequestProcessor next) {
      super( next );
    }

  @Override
  public void processAdd(AddUpdateCommand cmd) throws IOException {
    SolrInputDocument doc = cmd.getSolrInputDocument();

    Object vid = doc.getFieldValue( "id" );
    Object vcontent = doc.getFieldValue( "content" );

    doc.setField( "fileurl", vid );

    // pass it up the chain
    super.processAdd(cmd);
  }
}

我已经通过将类路径设置为来编译它   CLASS-PATH: ../../dist/solr-solrj-4.10.1 ../../dist/solr-core-4.10.1.jar
并编译为

jar cfmv mira.jar Manifest.txt MaProcessor.class MaProcessorFactory.class

Manifest.txt是

CLASS-PATH: ../../solr-solrj-4.10.1 ../../solr-core-4.10.1.jar

我的Solrconfig.xml有

<lib dir="../../" regex="mira.jar" />

作为最后一个指令和

  <requestHandler name="/update" class="solr.UpdateRequestHandler"> 
   <lst name="defaults">
   <str name="update.chain">concatfld</str>
   </lst>      
   </requestHandler>

  <updateRequestProcessorChain name="concatfld">
      <processor class="mira.MaProcessorFactory" />
      <processor class="solr.LogUpdateProcessorFactory" />
     <processor class="solr.RunUpdateProcessorFactory" />
   </updateRequestProcessorChain>`

当我跑

   java -jar start.jar

我收到错误

  Error creating core [divine-c]: Error loading class 'mira.MaProcessorFactory'
    org.apache.solr.common.SolrException: Error loading class 'mira.MaProcessorFactory'

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

当你启动solr时,你看到加载了mira.jar的日志消息吗?通过查看日志可以很容易地验证是否加载了jar。

另外,我使用maven生成jar,我不熟悉jar cfmv命令。我会尝试使用像ant或maven这样的自动化工具生成最终jar。

这是我的两分钱。

答案 1 :(得分:0)

尝试将mira.jar放入与solr.xml相同级别的lib目录中 请参阅Shawn的回复:http://find.searchhub.org/document/a280909a7286e1c8#73b177718d3e9959

答案 2 :(得分:0)

我不知道这是否最终解决了,但你试图将你的库放在核心文件夹中吗?

public function changePassword() { $user = $this->Users->newEntity(); if (isset($this->request->data) && !empty($this->request->data)) { $user = $this->Users->patchEntity($user, $this->request->data, [ 'validate' => 'changePassword' ]); if ($user->errors()) { $this->Flash->success(__('Error')); } } $this->set(compact('user')); }

答案 3 :(得分:0)

您不必在Solrconfig中提及jar名称,而是由solr自动加载,如果它在solr.home.home / lib中或者由solr自动加载的任何solr路径。

现在自动加载jar,您需要提及类名为class="com.augmentsys.HelloWorld"的完整包的类名,如果需要,还可以使用名称标签进一步使用。

这样的事情

class="com.augmentsys.HelloWorld" name="mytest" 

试一试。