#node.js #elasticsearch #elasticsearch-painless
#node.js #elasticsearch #elasticsearch-безболезненный
Вопрос:
Итак, в моем js-коде у меня есть эта строка:
var _script = {
_script: {
script: {
lang: 'painless',
source: `
"""
if(1>2){
params._source.id;
}
else{
params._source.id;
}
"""
`
},
type: 'string',
order: params._source.id
}
}
Это приведет к сбою. Я вижу в журнале это сообщение об ошибке:
,"reason":"unexpected token ['\"\\n if(1>2){\\n params._source.id;\\n }\\n else{\\n params._source.id;\\n }\\n \"'] was expecting one of [{<EOF>, ';'}]."}}}]},
Сначала я попробовал использовать без символа тильды. И затем это также завершается неудачей.
Затем я попытался использовать tilde в начале, что-то вроде:
var _script = `{
Дело в том, что окончательный json, который будет отправлен в elastic, не показан в приведенном выше коде. Итак, «_script» — это лишь небольшая часть всего json.
Мне было интересно, добавил ли я тильду в самом начале и в конце всего json. Может быть, это могло бы сработать? Мне нужно разобраться, где это находится.
Но только в теории: как вы думаете, проблема есть? Поместить тильду вокруг всего json? Или это что-то другое?
Ответ №1:
Тройка "
недопустима в формате JSON, она работает только внутри Elastic stack (т. Е. от Kibana Dev Tools до ES).
То, как я обычно делаю это из Node.js заключается в добавлении каждой строки в массив, а затем я присоединяюсь к этому массиву, вот так:
const code = [];
code.push("if(1>2){");
code.push("params._source.id;");
code.push("} else {");
code.push("params._source.id;");
code.push("}");
source = code.join(" ");
Признаю, это не очень разборчиво. Другой способ — использовать сохраненные скрипты, чтобы вы могли просто ссылаться на свой скрипт по идентификатору в Node.js .
Комментарии:
1. Я почти уверен, что это должно было сработать с кодом, заключенным в ` though
2. Я попробовал ` и ваш метод, и оба завершились неудачей. :-/ действительно, «безболезненно».