Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 932
Jeremy Avatar asked May 01 '19 02:05

Jeremy


1 Answers

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

like image 130
Jeremy Avatar answered Oct 20 '22 13:10

Jeremy