Я использую простой ScriptTransformer <script> в своем DataImportHandler db-data-config.xml. Я хотел бы декодировать htmlentities и обнаружил, что мне нужно использовать модуль he. Скачал zip и распаковал conf\lib. Это часть моего сценария:
var he = require('./lib/he-master/he.js');
function removeSpecialCharacters(text) {
if (typeof text !== 'string') {
return text;
}
return he.decode(text);
}
Но я получаю ошибку:
javax.script.ScriptException: ReferenceError: "require" is not defined in <eval>
Почему ничего не работает «из коробки» (например, функция JS require) и как это решить?
Дешевле заплатить, чем использовать открытый исходный код, потому что ничего не работает «из коробки». Требуется много времени на устранение неполадок ($), прежде чем что-то с немного расширенной функциональностью заработает.
тоже пробовал
eval(readFile('./lib/he-master/he.js');
Но та же история: в комплект Solr из коробки ничего не входит:
javax.script.ScriptException: ReferenceError: "readFile" is not defined in <eval>
@EricLavault У меня все еще проблемы. В ./conf/db-data-config.xml я использую js-скрипт с load('./lib/jvm-npm.js');. I have ./lib/jvm-npm.js Итак, родственные папки lib и conf ara (верно?). jdk.nashorn.internal.runtime.ECMAException: TypeError: Cannot load script from ./lib/jvm-npm.js
«Дешевле платить, чем использовать открытый исходный код, потому что ничего не работает «из коробки». Требуются годы устранения неполадок ($), прежде чем что-то с немного расширенной функциональностью заработает». Никто вас не заставляет. Либо исправьте это сами, либо заплатите необходимую сумму, чтобы получить желаемое. Также ничего не стоит, что обработчик dataimporthandler был удален в Solr 9. Он также не предназначен для использования в качестве полноценной среды выполнения JavaScript — в этом случае вместо этого напишите свой код индексации в узле.
@MatsLindh Конечно, никто меня не заставляет... Я просто говорю, что если бы у меня (и тысяч новичков до меня) не было таких же бесконечных проблем с Debian (ничего не работает), слово бы распространился бы среди миллионов, и Microsoft к этому времени уже была бы банкротом, поскольку все были бы на Linux (и тысячи других программистов внесли бы свой вклад). (Честно говоря, после этого я попробовал Mint, и он отлично работал сразу после установки.)
@MatsLindh Если вы действительно не хотите ничего включать, ознакомительный файл для начала работы из 100 строк мог бы сэкономить сотни часов многим людям.
Вы задаете свой вопрос с множеством предположений, которые вы не объяснили. Понятия не имею, почему вы вообще попытались что-то потребовать в ScriptTransformer, не уточнив, где вы нашли такие советы или документацию. Мы не знаем, какую версию Solr вы используете и чего вы вообще пытаетесь достичь. Было бы полезно сформулировать ваш вопрос с большим контекстом и без всякой негативной предвзятости.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я понял, что решение состоит в том, чтобы использовать load и абсолютный путь:
load('C:\\solr-8.11.3\\server\\solr\\db\\lib\\he-master\\he.js');
Обратите внимание, что процессоры и преобразователи сценариев, написанные на JavaScript, работают на движке JavaScript под названием Nashorn (по умолчанию, начиная с Java 8, до версии Java 7 это был Rhino, и вы все еще можете указать другой). Nashorn используется как встроенный механизм сценариев, который работает внутри Java-приложений, таких как Solr, но у него нет встроенной системы модулей, как у узла
require(). Однако вы все равно можетеload()использовать сторонний скрипт, реализующий спецификацию CommonJS, @see stackoverflow.com/questions/19500141/…