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

Solr DataImportHandler ScriptTransformer中JS功能受限问题求助

解决Solr DataImportHandler中ScriptTransformer加载he模块的问题

为什么require/readFile不生效

Solr的ScriptTransformer使用的是Java Nashorn JavaScript引擎,并非Node.js环境,因此Node.js专属的require、readFile等API在这个环境里不存在,自然会报错。

解决办法

方法1:用Java API加载he.js脚本

Nashorn允许直接调用Java类,我们可以借助Java的文件读取API加载he.js内容,再通过eval执行:

  1. 确保你已经把he模块的脚本文件(推荐用浏览器版的he.min.js,避免模块化语法问题)放到Solr core的conf/lib目录下。
  2. 在db-data-config.xml的ScriptTransformer中编写以下代码:
<script><![CDATA[
// 使用Solr资源加载器读取he脚本,兼容性更强
var resourceLoader = solrCore.getResourceLoader();
var heInputStream = resourceLoader.openResource("lib/he.min.js");
var heScript = new java.io.BufferedReader(new java.io.InputStreamReader(heInputStream)).lines().collect(java.util.stream.Collectors.joining("\n"));
eval(heScript);

function removeSpecialCharacters(row) {
    var targetField = row.get("your_field_name"); // 替换成你要处理的字段名
    if (targetField) {
        row.put("your_field_name", he.decode(targetField));
    }
    return row;
}
]]></script>

方法2:直接用Java工具类解码HTML实体(更简便)

不需要额外引入he模块,利用Solr已依赖的org.apache.commons.text.StringEscapeUtils工具类直接解码:

<script><![CDATA[
function removeSpecialCharacters(row) {
    var targetField = row.get("your_field_name");
    if (targetField) {
        var decodedContent = org.apache.commons.text.StringEscapeUtils.unescapeHtml4(targetField);
        row.put("your_field_name", decodedContent);
    }
    return row;
}
]]></script>

这个方法无需额外下载模块,稳定性更强,优先推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:57:52