Solr Custom UpdateRequestProcessorFactory

1

Я столкнулся с этой проблемой. Я написал собственный файл 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);
  }
}

Я скомпилировал его, установив classpath как 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'

Любая помощь будет оценена.

  • 0
    solr-solrj-4.10.1 был опечаткой. У меня есть solr-solrj-4.10.1.jar в файле Manifest.txt.
Теги:
solr

4 ответа

1

Когда вы запускаете solr, вы видите сообщение журнала, в котором говорится, что mira.jar загружен? Легко проверить, загружена ли баночка или нет, просмотрев журналы.

Кроме того, я использую maven для создания jar, я не знаком с командой jar cfmv. Я бы попытался создать финальную банку с помощью инструмента автоматизации, такого как ant или maven.

Это мои два цента.

  • 0
    Да, загружен mira.jar. Я вижу это в командной строке во время обработки. Я не знаком с Maven. Возможно, я могу попробовать это. Команда jar cfmv является командой create-file-manifest-verify. У вас есть команда для создания банку с помощью Maven? Благодарю.
  • 0
    Так что проблема с банкой. Maven очень прост, пакет mvm создает банку, и вы можете использовать ее немедленно. Многие IDE также поддерживают maven. Вот пример шаблона шаблона solr-plugin: Issues.apache.org/jira/secure/attachment/12634690/…
0

Вам не нужно упоминать имя jar в Solrconfig, но оно автоматически загружается с помощью solr, если оно находится в файле solr.home.home/lib или любом пути solr, который автозагружается solr.

Теперь, когда jar загружается автоматически, вам нужно указать имя класса с полным пакетом, например class="com.augmentsys.HelloWorld" и если вы хотите, вы также можете использовать тег имени для дальнейшего использования.

так что-то вроде этого

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

Попробуйте.

0

Я не знаю, окончательно ли это решение, но попытались ли вы поместить свою библиотеку в основную папку?

{core_folder}/lib/mira.jar

0

Попробуйте поместить mira.jar в каталог lib на том же уровне, что и solr.xml. См. Ответ Shawn: http://find.searchhub.org/document/a280909a7286e1c8#73b177718d3e9959

  • 0
    Спасибо Ахмет, но это не сработало. Я перепробовал все виды вещей. Создайте lib в папке solr, поместите в нее файл mira.jar и поместите папку lib в solrconfig.xml. Также попытался не положить его в solrconfig.xml Ничего из этого не сработало. Там происходит что-то еще. Не могу положить палец на это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню