Solr DataImportHandler с использованием ScriptTransformer: функциональность JavaScript сильно ограничена

Я использую простой 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>

Обратите внимание, что процессоры и преобразователи сценариев, написанные на JavaScript, работают на движке JavaScript под названием Nashorn (по умолчанию, начиная с Java 8, до версии Java 7 это был Rhino, и вы все еще можете указать другой). Nashorn используется как встроенный механизм сценариев, который работает внутри Java-приложений, таких как Solr, но у него нет встроенной системы модулей, как у узла require(). Однако вы все равно можете load() использовать сторонний скрипт, реализующий спецификацию CommonJS, @see stackoverflow.com/questions/19500141/…

EricLavault 16.03.2024 16:33

@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

Mister Sir 17.03.2024 10:20

«Дешевле платить, чем использовать открытый исходный код, потому что ничего не работает «из коробки». Требуются годы устранения неполадок ($), прежде чем что-то с немного расширенной функциональностью заработает». Никто вас не заставляет. Либо исправьте это сами, либо заплатите необходимую сумму, чтобы получить желаемое. Также ничего не стоит, что обработчик dataimporthandler был удален в Solr 9. Он также не предназначен для использования в качестве полноценной среды выполнения JavaScript — в этом случае вместо этого напишите свой код индексации в узле.

MatsLindh 17.03.2024 17:52

@MatsLindh Конечно, никто меня не заставляет... Я просто говорю, что если бы у меня (и тысяч новичков до меня) не было таких же бесконечных проблем с Debian (ничего не работает), слово бы распространился бы среди миллионов, и Microsoft к этому времени уже была бы банкротом, поскольку все были бы на Linux (и тысячи других программистов внесли бы свой вклад). (Честно говоря, после этого я попробовал Mint, и он отлично работал сразу после установки.)

Mister Sir 18.03.2024 09:39

@MatsLindh Если вы действительно не хотите ничего включать, ознакомительный файл для начала работы из 100 строк мог бы сэкономить сотни часов многим людям.

Mister Sir 18.03.2024 09:47

Вы задаете свой вопрос с множеством предположений, которые вы не объяснили. Понятия не имею, почему вы вообще попытались что-то потребовать в ScriptTransformer, не уточнив, где вы нашли такие советы или документацию. Мы не знаем, какую версию Solr вы используете и чего вы вообще пытаетесь достичь. Было бы полезно сформулировать ваш вопрос с большим контекстом и без всякой негативной предвзятости.

JanHoy 21.03.2024 15:12
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я понял, что решение состоит в том, чтобы использовать load и абсолютный путь:

load('C:\\solr-8.11.3\\server\\solr\\db\\lib\\he-master\\he.js');

Другие вопросы по теме