我正在运行一个 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.json
at 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 的解决方案。一种可能性是强制收集保留,即使有许多启动错误,如果可能的话。
谢谢阅读!