1

我正在运行一个 solr 云集群并使用自定义搜索组件 - request-sanitizer-component

配置:

Server count: 8
Shards: 16
Replication factor: 3
Max shards per node: 6

我在 solrconfig.xml 中定义了搜索组件:

<searchComponent runtimeLib="true" name="request-sanitizer" version="1" class="com.cominvent.solr.RequestSanitizerComponent"/>

我已按照solr guide中的步骤将插件 jar 上传到 .system 集合。

然后,我使用带有此 curl的配置 API将插件 jar 添加到我的集合中:

curl http://solr-220.soma.plos.org:8983/solr/50_2/config -H 'Content-type:application/json' -d '{
    "add-runtimelib": { "name":"request-sanitizer", "version":1 }
}'

然后我添加搜索组件:

curl http://solr-220.soma.plos.org:8983/solr/50_2/config -H 'Content-type:application/json' -d '{
  "add-searchcomponent": {
    "name": "request-sanitizer",
    "runtimeLib": true,
    "class": "com.cominvent.solr.RequestSanitizerComponent",
    "sanitize": "rows=>50:50" }
}'

插件 jar 和搜索组件添加到configoverlay.jsonat http://solr-220.soma.plos.org:8983/solr/50_2/config/overlay

{
  "responseHeader":{
    "status":0,
    "QTime":0},
  "overlay":{
    "znodeVersion":4,
    "runtimeLib":{"request-sanitizer":{
        "name":"request-sanitizer",
        "version":1}},
    "searchComponent":{"request-sanitizer":{
        "name":"request-sanitizer",
        "runtimeLib":true,
        "class":"com.cominvent.solr.RequestSanitizerComponent",
        "sanitize":"rows=>50:50"}}}}

但是,当我尝试查询集合时,出现以下异常:

java.lang.NoClassDefFoundError: org/apache/solr/handler/component/SearchComponent

我的配置有什么问题?

笔记

对于第一次尝试,我将 jar 放在 SOLR_HOME/lib 中。这最初适用于具有少量分片的集群 - 集合创建会引发相同的 NoClassDefFoundError 异常,但它们会在服务器重新启动后消失。

但是,当我增加到 8 个分片时,创建时抛出了相同的异常,并且从未创建过集合。这就是我决定使用配置 API 的原因,但我也会接受使用 SOLR_HOME/lib 的解决方案。一种可能性是强制收集保留,即使有许多启动错误,如果可能的话。

谢谢阅读!

4

1 回答 1

0

我们在类路径中有两个 request-sanitizer jar 实例。移除其中一个罐子解决了这个问题。

于 2017-06-27T19:39:10.540 回答