Solr runtimelib用法

时间:2015-07-13 00:56:54

标签: solr

我正在尝试使用在创建请求处理程序和其他组件时为将jar指定为运行时库而添加的支持。但是,我从文档(https://cwiki.apache.org/confluence/display/solr/Adding+Custom+Plugins+in+SolrCloud+Mode)中不清楚这是否仅适用于通过ConfigAPI创建的组件,或者如果将runtimeLib="true"添加到solrconfig.xml中它也应该有效。

例如:

<requestHandler name="/browse" class="solr.SearchHandler" runtimeLib="true">

我添加了runtimeLib =&#34; true&#34;到solrconfig.xml中的所有searchComponents和requestHandlers,看看它是否可行,但是在启动Solr实例时,它们都会失败,因为它们正在查找自定义jar文件中的类。我已经根据Solr参考指南/ Wiki文档添加了.system集合并上传了jar,并且可以看到.system集合,我也可以看到我的集合的configoverlay.json有我上传的两个jar

我的收藏的configoverlay.json内容

{"runtimeLib":{
    "my-custom-jar":{
      "name":"my-custom-jar",
      "version":1},
    "sqljdbc41-jar":{
      "name":"sqljdbc41-jar",
      "version":1}}}

是否支持在solrconfig.xml中指定runtimeLib属性?如果是这样,那么正确的用法是什么?

2 个答案:

答案 0 :(得分:0)

你快到了。在您链接到的页面上,有一个创建解析器的示例。该示例使用与页面其余部分完全不同的示例值,因此我可以理解为什么您可能会掩盖它。

关键是,您需要使用页面上提供的curl命令注册请求处理程序。不幸的是,您需要使用我必须深入了解源代码的命令来查找:create-requesthandler。要使用上面的值创建请求处理程序,我认为您应该发出命令

curl "http://{servername}:8983/solr/{collection}/config" -H 'Content-type:application/json' -d '{
    "create-requesthandler": { 
        "name":"my-custom-jar", 
        "runtimeLib": true, 
        "class": "solr.SearchHandler" 
    }
}'

请记住替换servernamecollection的值。如果您使用的是非默认值,请更改端口。

重新启动你的solr服务器,该插件应该可用。

答案 1 :(得分:0)

目前似乎不支持从托管模式的插件中加载类:

https://issues.apache.org/jira/browse/SOLR-8751

这可能意味着您必须如上所述通过API动态添加它。因此,解决方案可能是使用最小的托管架构,然后添加需要外部jar的字段。

对我来说,最简单的解决方案是根本不使用Blob API,而是直接将所需的jar添加到Solr实例的类路径中,如下所述:

http://lucene.472066.n3.nabble.com/Problems-while-setting-classpath-while-upgrading-to-Solr-5-1-from-Solr-4-X-tp4209853p4209863.html