You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solr URP链调用JS脚本抛出NoSuchMethodException异常

问题根因

抛出No such function finish异常的核心原因是Solr的StatelessScriptUpdateProcessor对关联脚本有强制接口规范,必须实现三个固定生命周期函数,你当前的脚本仅实现了processAdd方法,缺少必需的finish回调函数,因此执行时触发方法不存在的错误。
另外你配置的更新请求处理器链顺序存在问题,会导致日志记录逻辑无法正常生效。

修复方案

1. 补全脚本必需的生命周期函数

Solr无状态脚本更新处理器要求脚本必须实现以下三个函数,无对应业务逻辑时写空实现即可:

  • processAdd(cmd):处理文档新增/更新请求,即你已经编写的字段解析逻辑
  • processDelete(cmd):处理文档删除请求
  • finish():整批更新请求处理完成后的收尾回调

修正后的完整updateProcessor.js内容如下:

function processAdd(cmd) {
  var doc = cmd.solrDoc;
  var field = doc.getFieldValue("id");
  // 增加判空逻辑,避免id格式不符合预期时抛出下标越界错误
  if (field && field.split("/").length >= 4) {
    var desired_val = field.split("/")[3];
    doc.setField("split", desired_val);
  }
}

// 无删除处理需求时留空即可
function processDelete(cmd) {
}

// 无收尾逻辑需求时留空即可
function finish() {
}

注意:脚本内变量建议添加var声明,避免污染脚本引擎全局上下文引发不可预期的问题。

2. 修正更新处理器链的执行顺序

Solr更新处理器链按照配置从上到下的顺序执行,其中RunUpdateProcessorFactory是真正执行索引写入操作的处理器,必须放在链的最后一位,你当前的配置把LogUpdateProcessorFactory放在它后面,会导致日志逻辑无法正常执行。
修正后的URP链配置如下:

<updateRequestProcessorChain name="update_chain" default="true">
  <processor class="solr.StatelessScriptUpdateProcessorFactory">
    <str name="script">updateProcessor.js</str>
  </processor>
  <processor class="solr.LogUpdateProcessorFactory"/>
  <processor class="solr.RunUpdateProcessorFactory"/>
</updateRequestProcessorChain>

3. 重载配置生效

修改完成后,重载对应Solr核心/集合,重新执行索引操作即可正常运行。

内容的提问来源于stack exchange,提问作者feder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 20:57:13