Сбой пользовательского UpdateRequestProcessor с ошибкой «Ошибка создания UpdateRequestProcessorFactory» - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь вычислить длину поля (например, title). Я использую Nutch для сканирования веб-страниц. Я создал файл fieldProcessor.jar со следующим кодом:

FieldProcessorFactory. java

package ved;

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 FieldProcessorFactory extends UpdateRequestProcessorFactory
{
  @Override
  public UpdateRequestProcessor getInstance(SolrQueryRequest req, SolrQueryResponse rsp, UpdateRequestProcessor next)
  {
    return new FieldProcessor(next);
  }
}

FieldProcessor. java

package ved;

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;

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

  @Override
  public void processAdd(AddUpdateCommand cmd) throws IOException {
      String title = (String) cmd.getSolrInputDocument().get("title").getValue();        
      cmd.getSolrInputDocument().addField("title_length_i", title.split(" ").length);        
      super.processAdd(cmd);
  }
}

Я добавил следующие строки в solrconfig.xml:

  <lib dir="${solr.install.dir:../../../..}/plugins/" regex="fieldProcessor.jar" />

  <updateRequestProcessorChain name="process-articles" lib="custom-libs" version="1">
      <processor class="ved.FieldProcessor"/>
      <processor class="solr.LogUpdateProcessorFactory" />
      <processor class="solr.DistributedUpdateProcessorFactory" />
      <processor class="solr.RunUpdateProcessorFactory" />
  </updateRequestProcessorChain>

  <initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
    <lst name="defaults">
      <str name="df">text</str>
      <str name="update.chain">process-articles</str>
    </lst>
  </initParams>

После этого я переиндексирую, используя Nutch. Но после перезагрузки ядра я получаю следующую ошибку:

nutch: org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Error Instantiating UpdateRequestProcessorFactory, ved.FieldProcessor failed to instantiate org.apache.solr.update.processor.UpdateRequestProcessorFactory

Почему я получаю эту ошибку?

EDIT Вот журнал Solr:

2020-02-21 14:19:51.172 ERROR (qtp1282788025-21) [   x:nutch] o.a.s.s.HttpSolrCall null:org.apache.solr.common.SolrException: Error handling 'reload' action
    at org.apache.solr.handler.admin.CoreAdminOperation.lambda$static$2(CoreAdminOperation.java:113)
    at org.apache.solr.handler.admin.CoreAdminOperation.execute(CoreAdminOperation.java:384)
    at org.apache.solr.handler.admin.CoreAdminHandler$CallInfo.call(CoreAdminHandler.java:388)
    at org.apache.solr.handler.admin.CoreAdminHandler.handleRequestBody(CoreAdminHandler.java:174)
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:173)
    at org.apache.solr.servlet.HttpSolrCall.handleAdmin(HttpSolrCall.java:748)
    at org.apache.solr.servlet.HttpSolrCall.handleAdminRequest(HttpSolrCall.java:729)
    at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:510)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:361)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:305)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1691)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:582)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213)
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:119)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
    at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:335)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
    at org.eclipse.jetty.server.Server.handle(Server.java:534)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:320)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
    at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.solr.common.SolrException: Unable to reload core [nutch]
    at org.apache.solr.core.CoreContainer.reload(CoreContainer.java:1189)
    at org.apache.solr.handler.admin.CoreAdminOperation.lambda$static$2(CoreAdminOperation.java:111)
    ... 36 more
Caused by: org.apache.solr.common.SolrException: Error Instantiating UpdateRequestProcessorFactory, ved.FieldProcessor failed to instantiate org.apache.solr.update.processor.UpdateRequestProcessorFactory
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:977)
    at org.apache.solr.core.SolrCore.reload(SolrCore.java:640)
    at org.apache.solr.core.CoreContainer.reload(CoreContainer.java:1183)
    ... 37 more
Caused by: org.apache.solr.common.SolrException: Error Instantiating UpdateRequestProcessorFactory, ved.FieldProcessor failed to instantiate org.apache.solr.update.processor.UpdateRequestProcessorFactory
    at org.apache.solr.core.SolrCore.createInstance(SolrCore.java:774)
    at org.apache.solr.core.SolrCore.createInitInstance(SolrCore.java:809)
    at org.apache.solr.core.SolrCore.initPlugins(SolrCore.java:2717)
    at org.apache.solr.update.processor.UpdateRequestProcessorChain.init(UpdateRequestProcessorChain.java:127)
    at org.apache.solr.core.SolrCore.createInitInstance(SolrCore.java:811)
    at org.apache.solr.core.SolrCore.initPlugins(SolrCore.java:2698)
    at org.apache.solr.core.SolrCore.initPlugins(SolrCore.java:2692)
    at org.apache.solr.core.SolrCore.loadUpdateProcessorChains(SolrCore.java:1401)
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:933)
    ... 39 more
Caused by: java.lang.ClassCastException: class ved.FieldProcessor
    at java.lang.Class.asSubclass(Class.java:3404)
    at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:539)
    at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:486)
    at org.apache.solr.core.SolrCore.createInstance(SolrCore.java:753)
    ... 47 more

2020-02-21 14:19:52.209 INFO  (qtp1282788025-12) [   ] o.a.s.s.HttpSolrCall [admin] webapp=null path=/admin/cores params={indexInfo=false&wt=json&_=1581436974406} status=0 QTime=0
2020-02-21 14:19:52.227 INFO  (qtp1282788025-15) [   ] o.a.s.s.HttpSolrCall [admin] webapp=null path=/admin/cores params={wt=json&_=1581436974406} status=0 QTime=2
2020-02-21 14:19:52.256 INFO  (qtp1282788025-16) [   ] o.a.s.s.HttpSolrCall [admin] webapp=null path=/admin/info/system params={wt=json&_=1581436974407} status=0 QTime=40

1 Ответ

1 голос
/ 21 февраля 2020

Фактическая ошибка:

Caused by: java.lang.ClassCastException: class ved.FieldProcessor

Это происходит, когда класс, который вы указали в вашей конфигурации, не соответствует ожидаемому типу. Поскольку все остальные классы заканчиваются на Factory, вы хотите вместо этого указать FieldProcessorFactory, а не FieldProcessor напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...