我被这个问题困扰了。我编写了一个自定义的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'
任何帮助将不胜感激。
答案 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"
试一试。