Solr 9 Cloud的 solrconfig.xml中 ScriptUpdateProcessorFactory的使用在创建集合时失败

前端开发 2026-07-12

我在Solr 8.11上运行Script Update Factory时没有遇到任何问题。

迁移到Solr9时,在从ConfigSet创建集合的过程中失败,错误如下:

org.apache.solr.client.solrj.impl.BaseHttpSolrClient$RemoteSolrException: Error from server at http://172.19.0.3:8983/solr/admin/cores: Error CREATEing SolrCore 'collection2026-03-01084209_shard1_replica_n1': Unable to create core [collection2026-03-01084209_shard1_replica_n1] Caused by: No ScriptEngine found by name: JavaScript -- supported names: at org.apache.solr.client.solrj.impl.HttpSolrClientBase.processErrorsAndResponse(HttpSolrClientBase.java:268) at org.apache.solr.client.solrj.impl.Http2SolrClient.processErrorsAndResponse(Http2SolrClient.java:690) at org.apache.solr.client.solrj.impl.Http2SolrClient$1.lambda$onHeaders$0(Http2SolrClient.java:544) at org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor.lambda$execute$0(ExecutorUtil.java:381) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.base/java.lang.Thread.run(Unknown Source)

使用的Docker镜像:image: solr:9.10.1

solrconfig.xml:

......
<updateRequestProcessorChain name="script">
   <processor class="org.apache.solr.scripting.update.ScriptUpdateProcessorFactory">
     <str name="script">script1234.js</str>
     <str name="engine">JavaScript</str>
     <lst name="params">
       <str name="config_param">example config parameter</str>
     </lst>
   </processor>
   <processor class="solr.LogUpdateProcessorFactory" />
   <processor class="solr.RunUpdateProcessorFactory" />
 </updateRequestProcessorChain>
.......

docker compose文件(全部标准):

services:
  solr:
    image: solr:9.10.1
    ports:
      - "8983:8983"
    networks: [search]
    environment:
      ZK_HOST: "zoo:2181"
    command: 
      - "-Denable.packages=true"
      - "-Dsolr.modules=scripting"
    depends_on: [zoo]

  zoo:
    image: zookeeper:3.9
    networks: [search]
    environment:
      ZOO_4LW_COMMANDS_WHITELIST: "mntr,conf,ruok"

networks:
  search:
    driver: bridge

我尝试了有无engine标签的各种做法。如果我移除engine标签,就会收到一个错误,提示.js扩展名未知。在所有情况下,错误异常都没有提供关于受支持的扩展名或脚本引擎的详细信息。

我在启动模式下以云模式启动Solr9,并包含 -Dsolr.modules=scripting。

用于复现Solr9 API v1的最小脚本:

#!/bin/bash
echo Starting...
cd ./conf_default/conf
DT=$(date +%F%H%M%S)
echo delete config set

curl -u gis:gis "http://localhost:8983/solr/admin/configs?action=DELETE&name=myConfigSet$DT&omitHeader=true"

echo create congigset - with authentication activated

(zip -r - *) | curl -u user:password -X POST --header "Content-Type:application/octet-stream" --data-binary @- "http://localhost:8983/solr/admin/configs?action=UPLOAD&name=myConfigSet$DT"

echo create collection

curl -u user:password "http://localhost:8983/solr/admin/collections?action=CREATE&name=collection$DT&collection.configName=myConfigSet$DT&numShards=1"

有人知道我在这里到底哪里做错了吗?

解决方案

这很可能是因为Nashorn(JVM的 JavaScript引擎)已从JDK中移除:

Java 11及以前版本自带一个名为 Nashorn 的JavaScript引擎,但 Java 12将需要你自行添加JavaScript引擎

Nashorn仍作为一个独立的OpenJDK项目维护,因此你仍可以通过将所需的JAR文件添加到Solr的 Lib目录中来使用它。

供参考:

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章