Elasticsearch Painless: Error when using three quotes: Unexpected Character ('\"' (code 34))

[亡魂溺海] 提交于 2020-06-27 15:52:10

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!