Elasticsearch Painless:使用三个引号时出错:意外字符("\""(代码34)) [英] Elasticsearch Painless: Error when using three quotes: Unexpected Character ('\"' (code 34))
问题描述
我正在运行Elasticsearch的本地实例,并尝试在scripted_fields下使用"painless".我可以写一行脚本代码就好了,但是当我使用三引号(根据文档支持)创建多行脚本时,它给了我这个奇怪的解析错误.
I'm running a local instance of Elasticsearch, and trying to work with 'painless' under scripted_fields. I can write a single line of script code just fine, but when I use triple-quotes (which is supported as per documentation) to create a multi-line script, it gives me this strange parsing error.
运行单行脚本可以正常工作:
Running a single-line of script works fine:
{
"script_fields": {
"scripted": {
"script": {
"lang": "painless",
"source": "0"
}
}
}
}
在每个结果中返回的每个实体具有此结果(预期):
With this result (expected) in each entity returned in results:
"fields" : {
"scripted" : [
0
]
}
但是使用多行格式:
{
"script_fields": {
"scripted": {
"script": {
"lang": "painless",
"source":
"""
0
"""
}
}
}
}
给我这个错误:
Unexpected character ('\"' (code 34)): was expecting comma to separate Object entries\n at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@56e69b76; line: 7, column: 12]
有什么想法吗?
推荐答案
我能够(至少)为Postman解决一个问题.您不能在邮递员正文JSON中使用多行字符串,因此请使用预先请求脚本.这是一个示例:
I was able to work through a solution for Postman (at least). You can't use multi-line strings in a postman body JSON, so use a pre-request script. Here's an example:
pm.environment.set("painless_script",`\
return 0\
`);
注意:
- 使用勾号"包装脚本
- 您必须逃避每一行的结尾,否则Painless会抱怨.
然后在邮件正文中:
{
"script_fields": {
"scripted": {
"script": {
"lang": "painless",
"source": "{{painless_script}}"
}
}
}
}
这会产生来自Elasticsearch的正确结果
This yields correct result from Elasticsearch
这篇关于Elasticsearch Painless:使用三个引号时出错:意外字符("\""(代码34))的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!