Я столкнулся с этой проблемой. Я написал собственный файл 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'
Любая помощь будет оценена.
Когда вы запускаете solr, вы видите сообщение журнала, в котором говорится, что mira.jar загружен? Легко проверить, загружена ли баночка или нет, просмотрев журналы.
Кроме того, я использую maven для создания jar, я не знаком с командой jar cfmv. Я бы попытался создать финальную банку с помощью инструмента автоматизации, такого как ant или maven.
Это мои два цента.
Вам не нужно упоминать имя jar в Solrconfig, но оно автоматически загружается с помощью solr, если оно находится в файле solr.home.home/lib или любом пути solr, который автозагружается solr.
Теперь, когда jar загружается автоматически, вам нужно указать имя класса с полным пакетом, например class="com.augmentsys.HelloWorld"
и если вы хотите, вы также можете использовать тег имени для дальнейшего использования.
так что-то вроде этого
class="com.augmentsys.HelloWorld" name="mytest"
Попробуйте.
Я не знаю, окончательно ли это решение, но попытались ли вы поместить свою библиотеку в основную папку?
{core_folder}/lib/mira.jar
Попробуйте поместить mira.jar в каталог lib на том же уровне, что и solr.xml. См. Ответ Shawn: http://find.searchhub.org/document/a280909a7286e1c8#73b177718d3e9959