问题
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
]
}
But using multi-line format:
{
"script_fields": {
"scripted": {
"script": {
"lang": "painless",
"source":
"""
0
"""
}
}
}
}
Gives me this error:
Unexpected character ('\"' (code 34)): was expecting comma to separate Object entries\n at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@56e69b76; line: 7, column: 12]
Any ideas?
回答1:
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\
`);
Notes:
- Use 'ticks' to wrap the script
- You have to escape the end of every line, otherwise Painless will complain.
Then in the body of the message:
{
"script_fields": {
"scripted": {
"script": {
"lang": "painless",
"source": "{{painless_script}}"
}
}
}
}
This yields correct result from Elasticsearch
来源:https://stackoverflow.com/questions/55931073/elasticsearch-painless-error-when-using-three-quotes-unexpected-character