所以在我的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>, ';'}].\"}}}]},
我首先尝试了没有波浪号字符。然后它也失败了。 然后,我尝试在开始时使用波浪号,例如:
var _script = `{
事情是,将要发送到elastic的最终json没有在上面的代码中显示。因此,“ _ script”只是所有json的一小部分。 我想知道是否在整个json的开头和结尾处添加了波浪号。也许可以用吗?我需要弄清楚它在哪里。 但是从理论上讲:您认为问题在那里吗?将波浪号放在所有json周围?或者是别的什么?
答案 0 :(得分:1)
三元组"
不是有效的JSON,它仅在弹性堆栈内部起作用(即,从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(" ");
我承认这不是超级清晰。另一种方法是使用stored scripts,以便您可以通过Node.js中的ID来简单地引用脚本。